【问题标题】:BigQuery Script to replicate google cloud postgres tables to BigQuery with federated queriesBigQuery 脚本,通过联合查询将谷歌云 postgres 表复制到 BigQuery
【发布时间】:2021-01-21 16:30:18
【问题描述】:

我有一个谷歌云 postgres 实例,我正在尝试使用运行联合查询的脚本将所有表从架构复制到单独的谷歌 bigquery 表中,该脚本将安排在某个时间间隔运行。我正在使用来自 information_schema 的数据,因为我希望脚本也能够选择新添加的表。

假设分析架构有 4 个表。

analytics.table1
analytics.table2
analytics.table3
analytics.table4

下面的示例代码生成分析架构中所有表的列表,并将其设置为变量名称“table_name”。

DECLARE table_name ARRAY<STRING>;

SET table_name=(
SELECT * FROM EXTERNAL_QUERY("<your_connection_id>",
    "select table_schema||'.'||table_name as table_name from information_schema.tables 
        where table_schema='analytics';");
);

我对这个脚本的意图是使用以下查询创建四个单独的 bigquery 表

CREATE TABLE analytics.table1 AS
SELECT * FROM EXTERNAL_QUERY("<your_connection_id>", "SELECT * FROM analytics.table1");

CREATE TABLE analytics.table2 AS
SELECT * FROM EXTERNAL_QUERY("<your_connection_id>", "SELECT * FROM analytics.table2");

CREATE TABLE analytics.table3 AS
SELECT * FROM EXTERNAL_QUERY("<your_connection_id>", "SELECT * FROM analytics.table3");

CREATE TABLE analytics.table4 AS
SELECT * FROM EXTERNAL_QUERY("<your_connection_id>", "SELECT * FROM analytics.table4");

循环遍历我的表“table_name”列表以使用单独的 sql 语句创建这些表的最佳方法是什么?

【问题讨论】:

    标签: postgresql google-bigquery dynamic-sql


    【解决方案1】:

    你可以试试这个解决方案:

    DECLARE TABLE_LIST ARRAY<STRING>;
    DECLARE DSQL STRING;
    DECLARE i INT64 DEFAULT 1;
    DECLARE cnt INT64 DEFAULT 0;
    SET TABLE_LIST = ARRAY(SELECT * FROM EXTERNAL_QUERY("connection-id", "SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'analytics';"));
    SET cnt = ARRAY_LENGTH(TABLE_LIST);
    WHILE i <= cnt 
    DO
      SET DSQL = '"SELECT * FROM analytics.' || TABLE_LIST[ORDINAL(i)] || '"';
      EXECUTE IMMEDIATE 'CREATE TABLE analytics.' || TABLE_LIST[ORDINAL(i)] || ' AS SELECT * FROM EXTERNAL_QUERY("connection-id",' || DSQL || ');';
      SET i = i + 1;
    END WHILE;
    

    【讨论】:

    • 您可以将此解决方案用作“计划查询”,但请确保添加CREATE TABLE IF NOT EXISTSCREATE OR REPLACE TABLE以避免异常!
    • 如果解决方案有帮助请告诉我!
    猜你喜欢
    • 2021-11-19
    • 2021-07-26
    • 2017-08-20
    • 2018-07-18
    • 2023-03-24
    • 2022-07-27
    • 1970-01-01
    • 2016-06-07
    • 2018-03-01
    相关资源
    最近更新 更多