如何在 FROM 语句中使用动态变量?我得到一个表值函数未找到 CONCAT

问题描述 投票:0回答:1

我正在导出几个 BigQuery 表,并且希望创建一个循环来执行此操作。见下文。

DECLARE list_of_tables ARRAY\<STRING\>;
DECLARE table_name STRING;

SET list_of_tables = ARRAY(
  SELECT DISTINCT table_name 
  FROM `project.dataset.INFORMATION_SCHEMA.TABLES` 
  WHERE REGEXP_CONTAINS(table_name, "^my_table") AND table_type = "BASE TABLE");

LOOP
SET table_name = list_of_tables\[OFFSET(counter)\];
    
    EXPORT DATA OPTIONS(
      uri = CONCAT('gs://archive/', table_name, '_*.csv'),
      format = 'CSV',
      overwrite = TRUE
    ) AS (
    SELECT *
      FROM CONCAT('project.dataset.', table_name)
    );

END LOOP;

我收到错误

未找到表值函数:CONCAT

我有办法利用变量

table_name
进行 SELECT FROM 吗?

google-bigquery
1个回答
0
投票

试试这个。


DECLARE list_of_tables ARRAY<STRING>;
DECLARE table_name STRING;
DECLARE count INT64;

SET count = 0;

SET list_of_tables = (
  SELECT ARRAY_AGG(table_name)
  FROM `project.dataset.INFORMATION_SCHEMA.TABLES`
  WHERE REGEXP_CONTAINS(table_name, "^my_table") AND table_type = "BASE TABLE"
);

WHILE count < ARRAY_LENGTH(list_of_tables) DO
  SET table_name = list_of_tables[OFFSET(counter)];

  EXECUTE IMMEDIATE FORMAT("""
    EXPORT DATA OPTIONS(
      uri='gs://archive/%s_*.csv',
      format='CSV',
      overwrite=TRUE
    ) AS (
      SELECT *
      FROM `project.dataset.%s`
    )
  """, table_name, table_name);

  SET count = count + 1;
END WHILE;

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.