我正在导出几个 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 吗?
试试这个。
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;