首页 > 解决方案 > 如何强制 BigQuery 自动检测包含所有字符串的架构?

问题描述

有没有办法--autodect在 BigQuery 中使用强制所有新字段被视为strings

问题如下:我有一个csv文件\t,其中所有字段都被这样引用'67.4'。现在,如果我只是提供一个模式,那么bq load由于我无法理解的原因而中断。如果我这样做bq load --autodect,它可以正常工作,但仍然引用这些值。现在,我试着做

bq load --autodetect --quote="'" --max_bad_records=10000 
--field_delimiter="\t" --source_format=CSV 
repo:abc.2017 gs://abc/abc_2017-*.csv.gz

但它现在打破了

- gs://abc/abc_2017-04-16.csv.gz: Error while reading data,
error message: Could not parse '67.4' as int for field
int64_field_35 (position 35) starting at location 2138722

这是一行,字段再次由制表符分隔:

'333933353332333633383339333033333337' '31373335434633' 'pre' 'E' '1' '333933383335333833393333333333383338' '2017-02-01 05:13:59' '29' '333733333330333033323339333933313335333333303333333433393336' '333333353331333933363338333033373333333833323338333733323330' '3333343234313434' 'R' 'LC' '100 ' '-70.2' '-31.34' 'HSFC310' 'WOMT24I' '146' '1' '05'

想法?

标签: google-bigquery

解决方案


自动检测模式样本最多前 100 行,因此如果列包含最多前 100 行的所有整数,则数据类型将为整数。--qoute 标志的目的是用指定的值将列括起来。

例子:

Sample csv data:
col1, col2
1, "2"

如果您不指定 --quote,则默认情况下它将是"。 col2 的数据类型将是 Integer,值将是 2。

如果您指定的 --quote 不是默认的",那么它将用该值括起数据。例如:--quote="'",col2 将是字符串类型,数据值将是“2”(双引号本身将是数据值的一部分)

到目前为止,您不能强制自动检测架构使所有列都具有某种数据类型,否则,它毕竟不会自动检测。您可能需要提交一个功能请求,为 bq 加载(甚至在 UI 中)添加另一个标志,以使某些列具有某种数据类型(例如,我想将列 #1、2、15、100、xxx 设为是字符串或所有列都应该是字符串/整数/数字等...)。


推荐阅读