使用bigquery表中的通配符删除列名

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

我想从一个现有的表中创建一个新表(在bigquery中),不包括那些列名以'_scl'结尾的列。使用else是不可行的,因为几乎有1000多个以_scl结尾的列名。有没有一种方法可以使用通配符消除此类列?还是其他方式?

sql google-bigquery
1个回答
0
投票

这是我在BigQuery Interface(UI)上过滤/删除/消除现有表上的列的工作。不过,我认为可以使用python脚本或其他编程语言自动执行此操作。

无论如何,我想向您展示如何排除那些列,并且提供查询以创建不包含将不包含的列名的表(请检查列ctas_table_query)。

WITH
  schema_table_columns AS (
  SELECT
    STRING_AGG(column_name, ", "
    ORDER BY
      ordinal_position ASC) AS columns_only,
    STRING_AGG(CONCAT('  ', column_name), ", \n"
    ORDER BY
      ordinal_position ASC) AS columns_with_space,
    CONCAT(table_schema, '.', table_name) AS schema_table_name
  FROM
   "put_your_project_id_here"."put_your_dataset_here".INFORMATION_SCHEMA.COLUMNS
  WHERE
    table_name="put_your_table_name_here"
    AND column_name NOT LIKE '__put_your_condition_here'
  AND is_hidden = 'NO'
  GROUP BY
    schema_table_name)
SELECT
  concat ('CREATE OR REPLACE TABLE \n  ',
    RESULT.schema_table_name,
    ' AS \nSELECT \n',
    RESULT.columns_with_space,
    '\nFROM \n  ',
    RESULT.schema_table_name) AS ctas_table_query,
  RESULT.columns_only
FROM
  schema_table_columns AS RESULT
© www.soinside.com 2019 - 2024. All rights reserved.