交叉相乘的两个表显示有使用的BigQuery
问题描述:
我想乘TableA.ColumnB * TableB.ColumnB等相同的架构。我可以通过连接两个表的每一列乘以如下图所示
select TableA,
(TableA.ColumnB*TableB.ColumnB) as Column B,
(TableA.ColumnC*TableB.ColumnC) as Column C
from Table A
join Table B on TableA.ColumnA = TableB.ColumnA
由于有需要成倍增加,我在寻找一些简单的方法使用大的查询做很多列做到这一点,以后。像表A *表B(这样两个表相同的列乘上)
感谢
答
有没有像表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