查找要插入 BigQuery 的列名
Posted
技术标签:
【中文标题】查找要插入 BigQuery 的列名【英文标题】:Find column names to insert into BigQuery 【发布时间】:2018-06-21 15:39:48 【问题描述】:我正在尝试执行“插入表”,并看到我们需要明确指定列名。有没有办法在不手动输入的情况下获取这些数据?我正在 BigQuery 上执行此操作。
【问题讨论】:
【参考方案1】:这是一个从表中获取列名(不产生成本)并同时构建INSERT
列表的示例:
WITH EmptyReference AS (
SELECT *
FROM `bigquery-public-data.samples.shakespeare`
LIMIT 0
)
SELECT
CONCAT(
'INSERT dataset.tablename (',
ARRAY_TO_STRING(
REGEXP_EXTRACT_ALL(
TO_JSON_STRING((SELECT AS STRUCT t.*)),
r'"([^"]+)":'),
', '),
')')
FROM (
SELECT AS VALUE t
FROM EmptyReference AS t
UNION ALL SELECT AS VALUE NULL
) AS t
这会返回:
INSERT dataset.tablename (word, word_count, corpus, corpus_date)
June 2019 Update
现在支持在 INSERT 和 MERGE 语句中省略列名。
当省略列名时,目标表中的所有列都按照它们的序号位置升序包含
更多详情here
【讨论】:
完美运行!!非常感谢。 这个查询的哪一部分实际上只是获取列名?REGEXP_EXTRACT_ALL(TO_JSON_STRING(...))
部分可以。您可以尝试删除部分查询以查看发生了什么。【参考方案2】:
使用INFORMATION_SCHEMA,Elliott 的查询可以重写为:
WITH ColumnNames AS (
SELECT column_name FROM dataset.INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'tablename'
)
SELECT CONCAT(
'INSERT dataset.tablename (',
ARRAY_TO_STRING(ARRAY(SELECT column_name FROM ColumnNames), ', '),
')');
【讨论】:
以上是关于查找要插入 BigQuery 的列名的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery - 如何在不使用列名作为值的情况下导入 CSV?
Dataproc + BigQuery 示例 - 有可用的吗?
BigQuery AEAD 功能的密钥集管理最佳实践 [关闭]
Google Cloud Dataproc 删除 BigQuery 表不起作用