Bigquery 导出拆分为多个文件,其中包含一些空文件

jay*_*345 6 json export external-tables google-bigquery

我正在尝试使用 bigquery 导出功能将数据以 json 格式推送到 GCS。在该过程结束时,为了验证 GCS 文件中导出的记录计数,我创建了一个具有自动模式检测功能的外部表,只是为了获取导出的 GCS 文件中的记录计数。

这适用于单个导出的文件。但对于大小大于 1GB 的表,我使用通配符来拆分为多个文件。这会产生多个文件,并创建一些空文件。

空文件在查询外部表时导致错误:“400 架构没有字段”。

请向以下人员提出任何想法:

  1. 确保在多个文件场景的导出操作中不会创建空文件
  2. 在创建外部表时忽略空文件。
  3. 导出操作后计算 GCS 中记录数量的任何其他方法

Fas*_*oeu 11

我遇到了同样的问题,但我找到了解决方法:似乎 TEMP TABLE 可以解决问题。

(编辑:阅读文档时我注意到“导出数据”总是针对 BigQuery 表进行描述,而不是针对自定义选择。而且由于我在导出真实表时从未遇到过空文件,因此我给了临时表同样的机会)

假设我们有以下查询:

EXPORT DATA OPTIONS(
    uri='gs://mybucket/extract-here/*.csv.gz'
    , format='CSV'
    , compression='GZIP'
    , overwrite=true
    , header=true
    , field_delimiter=","
) AS (
    WITH mytable AS (
        SELECT col FROM UNNEST([1,2,3,4,5,6,7,8]) AS col
    )
    SELECT * FROM mytable
);
Run Code Online (Sandbox Code Playgroud)

您可以将其重写如下:

BEGIN
    CREATE TEMP TABLE _SESSION.tmpExportTable AS (
        WITH mytable AS (
            SELECT col FROM UNNEST([1,2,3,4,5,6,7,8]) AS col
        )
        SELECT * FROM mytable
    );
    EXPORT DATA OPTIONS(
        uri='gs://mybucket/extract-here/*.csv.gz'
        , format='CSV'
        , compression='GZIP'
        , overwrite=true
        , header=true
        , field_delimiter=","
    ) AS
    SELECT * FROM _SESSION.tmpExportTable;
END;
Run Code Online (Sandbox Code Playgroud)