有沒有像表A * B表什麼簡單的辦法?
不爲我所知道的BigQuery
我的建議是建立實用查詢,將與所有100S柱爲您創建正確的查詢涉及
當然,這可以用任何工具可以輕鬆完成,但如果你想留內的BigQuery - 下面是BigQuery的標準SQL
選擇它建立您的查詢的一部分,你需要爭取所有
(TableA.ColumnX * TableB.Column XB)爲X列,
#standardSQL
SELECT
CONCAT(
'SELECT a.ColumnA AS ColumnA, \n',
STRING_AGG(CONCAT(
'\ta.', SPLIT(kv_a, ':')[SAFE_OFFSET(0)], ' * ',
'b.', SPLIT(kv_b, ':')[SAFE_OFFSET(0)],
' AS ', SPLIT(kv_a, ':')[SAFE_OFFSET(0)]),
' , \n'), ' \n',
'FROM TableA a JOIN TableB b ON a.ColumnA = b.ColumnA'
) AS query_string
FROM (
SELECT
1 AS grp,
SPLIT(REGEXP_REPLACE(TO_JSON_STRING(a), '["{}]', '')) AS kvs_a,
SPLIT(REGEXP_REPLACE(TO_JSON_STRING(b), '["{}]', '')) AS kvs_b
FROM (SELECT * FROM TableA LIMIT 1) a
JOIN TableB b
ON a.ColumnA = b.ColumnA
LIMIT 1
)
CROSS JOIN UNNEST(kvs_a) kv_a WITH OFFSET pos_a
CROSS JOIN UNNEST(kvs_b) kv_b WITH OFFSET pos_b
WHERE pos_a = pos_b AND pos_a > 0
GROUP BY grp
,如果你的「環境」方面\ n和\ t - 您將在下面得到的結果(假設表三列在你的問題 - 但它會工作的完全相同100列)
query_string
------------
SELECT a.ColumnA AS ColumnA,
a.ColumnB * b.ColumnB AS ColumnB ,
a.ColumnC * b.ColumnC AS ColumnC
FROM TableA a JOIN TableB b ON a.ColumnA = b.ColumnA
所以,現在你可以複製實用查詢的結果,並運行它作爲您的最終查詢
正如你可能注意到了 - 這種方法是基於列的位置,但如果你有相同的列兩個表中的名稱 - 您可以通過刪除連接來簡化實用程序查詢 - 到som像下面這樣
#standardSQL
SELECT
CONCAT(
'SELECT a.ColumnA AS ColumnA, \n',
STRING_AGG(CONCAT(
'\ta.', SPLIT(kv_a, ':')[SAFE_OFFSET(0)], ' * ',
'b.', SPLIT(kv_a, ':')[SAFE_OFFSET(0)],
' AS ', SPLIT(kv_a, ':')[SAFE_OFFSET(0)]),
' , \n'), ' \n',
'FROM TableA a JOIN TableB b ON a.ColumnA = b.ColumnA'
) AS query_string
FROM (
SELECT
1 AS grp,
SPLIT(REGEXP_REPLACE(TO_JSON_STRING(a), '["{}]', '')) AS kvs_a
FROM (SELECT * FROM TableA LIMIT 1) a
)
CROSS JOIN UNNEST(kvs_a) kv_a WITH OFFSET pos_a
WHERE pos_a > 0
GROUP BY grp
你實際使用哪個dbms? – jarlh
你的方法對我來說似乎很簡單。 –
@jarlh我使用BigQuery作爲谷歌雲平臺。 – Harish