Google bigquery BigQuery中的四表联接

Google bigquery BigQuery中的四表联接,google-bigquery,Google Bigquery,好的,我试着把四个不同的表连接起来,这变得非常困难。我提供了每个表格的片段,希望你们都能提供帮助 表1:数据 +--------+--------+-----------+ | charge | amount | date | +--------+--------+-----------+ | 123 | 10000 | 2/10/2016 | | 456 | 10000 | 1/28/2016 | | 789 | 10000 | 3/30/2016 | +--

好的,我试着把四个不同的表连接起来,这变得非常困难。我提供了每个表格的片段,希望你们都能提供帮助

表1:数据

+--------+--------+-----------+
| charge | amount |   date    |
+--------+--------+-----------+
|    123 |  10000 | 2/10/2016 |
|    456 |  10000 | 1/28/2016 |
|    789 |  10000 | 3/30/2016 |
+--------+--------+-----------+
表2:数据和元数据

 +--------+------------+------------+
    | charge |    key     |   value    |
    +--------+------------+------------+
    |    123 | identifier | trrkfll212 |
    |    456 | code       | test       |
    |    789 | ID         | 123xyz     |
    +--------+------------+------------+
表3:买方

  +-----+-----------+----------+----------+
| id  |   date    | discount |   plan   |
+-----+-----------+----------+----------+
| ABC | 2/13/2016 | yes      | option a |
| DEF | 2/1/2016  | yes      | option a |
| GHI | 1/22/2016 | no       | option a |
+-----+-----------+----------+----------+
表4:买方元数据

+--------------+-----------+--------+
| id |    |key|              | value  |
+--------------+-----------+--------+
| ABC          | migration | TRUE   |
| DEF          | emid      | foo    |
| GHI          | ID        | 123xyz |
+--------------+-----------+--------+
好的,表data和data_元数据显然是通过charge列连接起来的

表buyer和buyer\u元数据由id列连接

但我想把它们联系在一起。我确信实现这一点的方法是通过“value”列中的公共字段(在本例中为123xyz)将元数据表链接在一起


有人能帮忙吗?

如果所有“链接”列都是唯一的,则可能会出现类似的情况:

SELECT * 
FROM data d
JOIN data_metadata dm ON d.charge = dm.charge
JOIN buyer_metada bm ON dm.value = bm.value
JOIN buyer b ON bm.id = b.id

如果没有,我认为您必须使用类似于
GROUP BY
子句的内容,如果所有“链接”列都是唯一的,则可能会出现类似的情况:

SELECT * 
FROM data d
JOIN data_metadata dm ON d.charge = dm.charge
JOIN buyer_metada bm ON dm.value = bm.value
JOIN buyer b ON bm.id = b.id

如果没有,我认为您必须使用类似于
GROUP BY
子句的方法,让我们分两步进行,首先为
数据创建组合表
买家
。数据的复合表:

SELECT data.charge, data.amount, data.date,
       data_metadata.key, data_metadata.value 
FROM [data] AS data  
JOIN (SELECT charge, key, value FROM [data_metadata]) AS data_metadata
ON data.charge = data_metadata.charge
和买方的综合表格:

SELECT buyer.id, buyer.date, buyer.discount, buyer.plan,
       buyer_metadata.key, buyer_metadata.value
FROM [buyer] AS buyer  
JOIN (SELECT key,  value FROM [buyer_metadata]) AS buyer_metadata
ON buyer.id = buyer_metadata.id
然后让我们连接两个组合表

SELECT composite_data.*, composite_buyer.*
FROM (
    SELECT data.charge, data.amount, data.date,
           data_metadata.key, data_metadata.value 
    FROM [data] AS data  
    JOIN (SELECT charge, key, value FROM [data_metadata]) AS data_metadata
    ON data.charge = data_metadata.charge) AS composite_data
JOIN (
    SELECT buyer.id, buyer.date, buyer.discount, buyer.plan,
           buyer_metadata.key, buyer_metadata.value
    FROM [buyer] AS buyer  
    JOIN (SELECT key,  value FROM [buyer_metadata]) AS buyer_metadata
    ON buyer.id = buyer_metadata.id) AS composite_buyer

ON composite_data.value = composite_buyer.value
我还没有测试过,但可能很接近


供参考,这是上的页面。您看到了吗?

让我们分两步进行,首先为
数据和
买家创建复合表。数据的复合表:

SELECT data.charge, data.amount, data.date,
       data_metadata.key, data_metadata.value 
FROM [data] AS data  
JOIN (SELECT charge, key, value FROM [data_metadata]) AS data_metadata
ON data.charge = data_metadata.charge
和买方的综合表格:

SELECT buyer.id, buyer.date, buyer.discount, buyer.plan,
       buyer_metadata.key, buyer_metadata.value
FROM [buyer] AS buyer  
JOIN (SELECT key,  value FROM [buyer_metadata]) AS buyer_metadata
ON buyer.id = buyer_metadata.id
然后让我们连接两个组合表

SELECT composite_data.*, composite_buyer.*
FROM (
    SELECT data.charge, data.amount, data.date,
           data_metadata.key, data_metadata.value 
    FROM [data] AS data  
    JOIN (SELECT charge, key, value FROM [data_metadata]) AS data_metadata
    ON data.charge = data_metadata.charge) AS composite_data
JOIN (
    SELECT buyer.id, buyer.date, buyer.discount, buyer.plan,
           buyer_metadata.key, buyer_metadata.value
    FROM [buyer] AS buyer  
    JOIN (SELECT key,  value FROM [buyer_metadata]) AS buyer_metadata
    ON buyer.id = buyer_metadata.id) AS composite_buyer

ON composite_data.value = composite_buyer.value
我还没有测试过,但可能很接近


供参考,这是上的页面。您看到了吗?

所有要用作表间“链接”的列在每个表中都是唯一的?@Delphine我对您的问题感到困惑?数据和数据元数据中的“费用”列显然链接在一起。以及买方和买方元数据中的ID列。但我需要把它们联系在一起。我明白是的,但我想知道你们的表之间是否有“许多”关系。例如,值“123”是否可能在数据表中出现多次?等等,为你的4张桌子哦,抱歉没有澄清。为了达到这个目的,让我们假设你看到的每一个负责人和id的值都是唯一的。不用担心!我建议用SQL语言来回答这个问题,因为我真的不知道BigQuery以及您试图使用它的方式,甚至不知道这种语言。也许它可以给你一个CLUELL列,你想用作表之间的“链接”在每个表中都是唯一的?@Delphine我不明白你在问什么?数据和数据元数据中的“费用”列显然链接在一起。以及买方和买方元数据中的ID列。但我需要把它们联系在一起。我明白是的,但我想知道你们的表之间是否有“许多”关系。例如,值“123”是否可能在数据表中出现多次?等等,为你的4张桌子哦,抱歉没有澄清。为了达到这个目的,让我们假设你看到的每一个负责人和id的值都是唯一的。不用担心!我建议用SQL语言来回答这个问题,因为我真的不知道BigQuery以及您试图使用它的方式,甚至不知道这种语言。也许它能给你一个线索