如何强制BigQuery自动检测所有字符串的架构?

时间:2019-05-31 03:09:27

标签: google-bigquery

在BigQuery中是否可以使用--autodect来强制将所有新字段都视为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''333933383335333833393333333333338338''2017-02-01   05:13:59''29''333733333330333033323323339333933313335333333333333333433393336''33333335333133393336333833303337333333333333333333333333373323330''3333343234313434''R''LC''100''-70.2''-31.34''HSFC310''WOMT24I''146''1

想法?

1 个答案:

答案 0 :(得分:1)

Auto detect模式最多对前100行进行采样,因此,如果该列包含前100行的所有整数,则数据类型将为整数。 --qoute flag的目的是用指定的值括住该列。

示例:

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

如果未指定--quote,则默认情况下为。col2的数据类型为Integer,值为2。

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

到目前为止,您不能强制自动检测模式使所有列都具有特定的数据类型,否则,最终将无法自动检测。您可能要提交功能请求,以添加另一个用于bq加载的标志(甚至在UI中),以使某些列具有某些数据类型(例如,我希望将列#1、2、15、100,xxx设置为为String或所有列均应为String / Integer / Numeric等)。