bigquery合并

f0brbegy  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(420)

我知道bigquery支持合并两个表。目前 INSERT 操作允许在表中插入显式值,例如

  1. INSERT dataset.Inventory (product, quantity)
  2. VALUES('top load washer', 10),
  3. ('front load washer', 20),
  4. ('dryer', 30),
  5. ('refrigerator', 10),
  6. ('microwave', 20),
  7. ('dishwasher', 30),
  8. ('oven', 5)

有没有一种方法可以和 MERGE 手术?例如,类似于:

  1. MERGE dataset.DetailedInventory T
  2. USING('top load washer', 10),
  3. ('front load washer', 20),
  4. ('dryer', 30),
  5. ('refrigerator', 10),
  6. ('microwave', 20),
  7. ('dishwasher', 30),
  8. ('oven', 5)
  9. ON T.appliance = [I don't know what would go here]
  10. WHEN NOT MATCHED THEN [insert]
  11. WHEN MATCHED THEN [update]

我对gbq和sql还比较陌生,如果这是一个简单的问题,我深表歉意。

ngynwnxp

ngynwnxp1#

可以使用子查询:

  1. MERGE dataset.DetailedInventory T
  2. USING (SELECT 'top load washer' as col1, 10 as col1 UNION ALL
  3. SELECT 'front load washer', 20 UNION ALL
  4. SELECT 'dryer', 30 UNION ALL
  5. SELECT 'refrigerator', 10 UNION ALL
  6. SELECT 'microwave', 20 UNION ALL
  7. SELECT 'dishwasher', 30 UNION ALL
  8. SELECT 'oven', 5
  9. ) src
  10. ON T.appliance = src.col1
  11. WHEN NOT MATCHED THEN [insert]
  12. WHEN MATCHED THEN [update]
fdbelqdn

fdbelqdn2#

考虑下面使用bigquery脚本的版本-我认为这是最接近您所要寻找的

  1. CREATE TEMP TABLE inventoryUpdates (product STRING, quantity INT64);
  2. INSERT inventoryUpdates
  3. VALUES ('top load washer', 11),
  4. ('front load washer', 20),
  5. ('dryer', 30),
  6. ('refrigerator', 11),
  7. ('microwave', 20),
  8. ('dishwasher', 30),
  9. ('oven', 5);
  10. MERGE `dataset.Inventory` T
  11. USING inventoryUpdates U
  12. ON T.product = U.product
  13. WHEN NOT MATCHED THEN
  14. INSERT (product, quantity) VALUES(product, quantity)
  15. WHEN MATCHED THEN
  16. UPDATE SET quantity = T.quantity + U.quantity;
展开查看全部

相关问题