【问题标题】:Pivot in BigQueryBigQuery 中的数据透视
【发布时间】:2021-01-29 04:33:35
【问题描述】:

当我在 BigQuery 中使用数据透视函数时,如下所示的 sn-p

CALL fhoffa.x.pivot(
  'bigquery-public-data.ghcn_d.ghcnd_2019' # source table
  , 'fh-bigquery.temp.test_pivotted' # destination table
  , ['id', 'date'] # row_ids
  , 'element' # pivot_col_name
  , 'value' # pivot_col_value
  , 30 # max_columns
  , 'AVG' # aggregation
  , 'LIMIT 10' # optional_limit
);

转置的列名称有前缀 e_

id date e_PRCP e_TMIN e_TMAX e_SNOW
1 27-01-2021 1 2 5 8
2 28-01-2021 3 5 9 3
3 29-01-2021 5 7 4 1

有什么办法可以去掉这个e_前缀?

【问题讨论】:

    标签: sql google-bigquery data-science data-analysis


    【解决方案1】:

    2021 年 5 月 12 日更新 Bigquery 现在支持原生 PIVOT,请在此处查看 documentation。


    这是该过程的完整定义,您可以在自己的数据集中创建一个并根据需要进行修改。你可以看到e_被添加到第一个EXECUTE IMMEDIATE中。

    CREATE OR REPLACE PROCEDURE `fhoffa.x.pivot`(table_name STRING, destination_table STRING, row_ids ARRAY<STRING>, pivot_col_name STRING, pivot_col_value STRING, max_columns INT64, aggregation STRING, optional_limit STRING)
    BEGIN
      DECLARE pivotter STRING;
    EXECUTE IMMEDIATE (
        "SELECT STRING_AGG(' "||aggregation
        ||"""(IF('||@pivot_col_name||'="'||x.value||'", '||@pivot_col_value||', null)) e_'||fhoffa.x.normalize_col_name(x.value))
       FROM UNNEST((
           SELECT APPROX_TOP_COUNT("""||pivot_col_name||", @max_columns) FROM `"||table_name||"`)) x"
      ) INTO pivotter 
      USING pivot_col_name AS pivot_col_name, pivot_col_value AS pivot_col_value, max_columns AS max_columns;
    EXECUTE IMMEDIATE (
       'CREATE OR REPLACE TABLE `'||destination_table
       ||'` AS SELECT '
       ||(SELECT STRING_AGG(x) FROM UNNEST(row_ids) x)
       ||', '||pivotter
       ||' FROM `'||table_name||'` GROUP BY '
       || (SELECT STRING_AGG(''||(i+1)) FROM UNNEST(row_ids) WITH OFFSET i)||' ORDER BY '
       || (SELECT STRING_AGG(''||(i+1)) FROM UNNEST(row_ids) WITH OFFSET i)
       ||' '||optional_limit
      );
    END;
    

    【讨论】:

    • 可以添加前缀作为参数,例如 ="e_" 并且可以为 case sum o count 添加 COALESCE 吗?
    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2016-06-18
    • 2022-01-07
    • 2013-10-25
    • 2021-06-10
    • 2016-02-19
    相关资源
    最近更新 更多