大查询 EXPORT DATA 语句创建没有数据且只有标题记录的多个文件

rad*_*rma 10 google-bigquery google-cloud-platform

我在这里读过类似的问题,但无法理解这是否已解决。

Google bigquery 将表导出到 Google Cloud 存储中的多个文件,有时甚至导出到单个文件

我正在使用下面的大查询导出数据选项从文件中的 2 个表中导出数据。我已经为此编写了选择查询。

EXPORT DATA OPTIONS(
uri='gs://whr-asia-datalake-dev-standard/outbound/Adobe/Customer_Master_'||CURRENT_DATE()||'*.csv',
format='CSV',
overwrite=true,
header=true,
field_delimiter='|') AS     
SELECT
Run Code Online (Sandbox Code Playgroud)

我从选择查询中只返回了 2 行,并且我假设应该在谷歌云存储中只创建一个文件。仅当数据大于1GB时才会创建多个文件。这就是我的理解。

但是,在云存储中创建了 3 个文件,其中 2 个文件只有标题记录,第三个文件有 3 条记录(1 个标题和 2 个实际数据记录)

radhika_sharma_ibm@cloudshell:~ (whr-asia-datalake-nonprod)$ gsutil ls gs://whr-asia-datalake-dev-standard/outbound/Adobe/
gs://whr-asia-datalake-dev-standard/outbound/Adobe/
gs://whr-asia-datalake-dev-standard/outbound/Adobe/Customer_Master_2021-02-04000000000000.csv
gs://whr-asia-datalake-dev-standard/outbound/Adobe/Customer_Master_2021-02-04000000000001.csv
gs://whr-asia-datalake-dev-standard/outbound/Adobe/Customer_Master_2021-02-04000000000002.csv
Run Code Online (Sandbox Code Playgroud)

为什么会创建空文件?有人可以帮忙吗?我们不想创建空文件。我认为当文件大小为 1 GB 时,只应创建一个文件。超过 1 GB,我们应该有多个文件但不为空。

小智 10

您必须强制将所有数据加载到一个工作程序中。通过这种方式,您将仅导出一个文件(如果 <1Gb)。我的解决方法:在 Select 语句顶部添加一个 select unique * 。


Sak*_*yan 5

在幕后,BigQuery 利用多个工作线程来读取和处理不同的数据部分,当我们使用通配符时,每个工作线程将创建一个单独的输出文件。

\n

目前,即使没有返回数据,BigQuery 也会生成空文件,因此我们会得到多个空文件。Bigquery 产品团队已意识到此问题,他们正在努力解决此问题,但没有可以共享的预计到达时间。

\n

有一个公共问题跟踪器,将定期更新进度。您可以通过引用此链接对问题加注星标以接收自动更新并给予关注。

\n

但目前我想提供如下解决方法:

\n

如果您知道输出将小于 1GB,则可以指定单个 URI 来获取单个输出文件。但是,EXPORT DATA 语句不\xe2\x80\x99t 支持单一 URI。

\n

您可以使用bq extract命令导出BQ表。

\n
bq --location=location extract \\\n--destination_format format \\\n--compression compression_type \\\n--field_delimiter delimiter \\\n--print_header=boolean \\\nproject_id:dataset.table \\\ngs://bucket/filename.ext\n
Run Code Online (Sandbox Code Playgroud)\n

事实上,即使您使用通配符 URI,bq 提取也不应该出现像 EXPORT DATA 语句那样的空文件问题。

\n


Cha*_*esh 5

使用导出数据时我遇到了同样的空文件问题。

经过一番研发后找到了解决方案。将 LIMIT xxx 放入您的 SELECT SQL 中即可解决问题。

您可以找到计数,并将其作为 LIMIT 值。

选择 ....

从 ...

在哪里 ...

限制xxx


Pen*_*m10 0

事实证明,您需要强制执行多个文件、通配符语法。CSV 文件或其他文件(如 AVRO)的文件夹。

uri 选项必须是单通配符 URI,如所述

https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements