【发布时间】:2019-11-15 03:56:53
【问题描述】:
我觉得这应该很简单,但我在 SQL 方面相对不熟练,我似乎无法弄清楚。我习惯于在 python (pandas) 或 Spark (通常是 pyspark) 中处理数据,这将是其中任何一个中的一个单行。具体来说,我使用的是 Snowflake SQL,但我认为这可能与许多 SQL 风格有关。
基本上我只是想从特定列中删除第一个字符。更一般地说,我想要做的是用同一列的子字符串替换一列。我什至会满足于创建一个新列,它是现有列的子字符串。我不知道如何做这些事情。
显而易见的解决方案是创建一个带有类似
的临时表CREATE TEMPORARY TABLE tmp_sub AS
SELECT id_col, substr(id_col, 2, 10) AS id_col_sub FROM table1
然后加入它并写一个新表
CREATE TABLE table2 AS
SELECT
b.id_col_sub as id_col,
a.some_col1, a.some_col2, ...
FROM table1 a
JOIN tmp_sub b
ON a.id_col = b.id_col
不过,我的表大约有十亿行,这感觉效率极低。也许我错了?也许这只是正确的方法吗?我想我可以将CREATE TABLE table2 AS... 替换为INSERT OVERWRITE INTO table1 ...,至少这样不会存储整个内容的额外副本。
欢迎任何想法和想法。我谦虚地站在一个被许多人似乎已经掌握的语言所迷惑的人的角度。
【问题讨论】:
标签: sql snowflake-cloud-data-platform