【发布时间】:2016-02-25 23:31:32
【问题描述】:
假设您有一个表“table_with_100_columns”。
并且您想通过简单的连接再添加一列...而不更改所有列名。换句话说,你想写类似
SELECT a.* as <a's columns without prefix>, additional_field
FROM [table_with_100_columns] a
JOIN [table_with_2_columns] b
ON a.col1 = b.key
您应该能够这样做以生成一个包含 101 列的新表,而无需手动重命名每一列。现在我知道如何做到这一点的唯一方法如下:
SELECT
a.col1 as col1,
a.col2 as col2,
a.col3 as col3,
...
a.col100 as col100,
b.additional_field as additional_field
FROM [table_with_100_columns] a
JOIN [table_with_2_columns] b
ON a.col1 = b.key
必须编写 100 行不必要的代码来向表中再添加一列,效率低得令人难以置信 - 所以我希望在加入时有更好的方法来保留列名?
更新
这在 BigQuery 中似乎还不可能。它很容易实现,我向 Google BigQuery 团队提出以下建议:
if no fields share a name in SELECT clause:
if no subtable reference names given:
Do not rename fields after JOIN
这不会破坏任何当前的功能,并为一个非常有用的功能添加了简单的支持。
【问题讨论】:
-
你试过用 python 或类似的东西生成 SQL 代码吗?
-
当然可以,但是这样做通常需要先使用辅助辅助查询来获取所有列名,然后提取列,然后每次生成 SQL。由客户端用户处理是一件奇怪的事情。这也使得代码非常冗长,并且 30k 字符截断不允许在查询描述中超过 3 或 4 个连接。它包含一个如此简单的功能 - 特别是如果表在列中有列 - 我认为有一种方法可以使用 Google BigQuery 来实现。
标签: sql join google-bigquery prefix