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