0

假设 11 月 10 日的数据
适用于美国:project_123.123456.data_20201110
适用于加拿大:project_123.123457.data_20201110
适用于巴西:project_123.123458.data_20201110

您将如何创建一个查询,您可以在其中根据国家/地区更改数据集 ID?
例如像这样的东西,但这显然不起作用

DECLARE USA, CAN, BRA INT64;
SET (USA, CAN, BRA) = (123456, 123457, 123458);

SELECT * 
FROM `project_123.x.data_20201110`
WHERE x = USA

我不想记住哪个数字是哪个国家的,只想创建一些变量然后忘记它。使用 _TABLE_SUFFIX 我们可以更改表名,但在这里我想更改 dataset_id。

4

1 回答 1

1

以下是您拥有的选项之一

DECLARE USA, CAN, BRA INT64;
DECLARE x STRING;

SET (USA, CAN, BRA) = (123456, 123457, 123458);
SET x = 'USA';

EXECUTE IMMEDIATE '''
SELECT * 
FROM `project-123.''' || 
  CASE x 
    WHEN 'USA' THEN USA
    WHEN 'CAN' THEN CAN
    WHEN 'BRA' THEN BRA
    ELSE USA
  END
  || '''.data_20201110`
'''   

另一个(不那么冗长)选项 -

DECLARE x, USA, CAN, BRA INT64;

SET (USA, CAN, BRA) = (123456, 123457, 123458);
SET x = USA;

EXECUTE IMMEDIATE '''
SELECT * 
FROM `project-123.''' || x || '''.data_20201110`
'''
于 2020-11-24T18:55:50.170 回答