2017-07-25 65 views
0

我想将字符串值数组存储在BigQuery中的单个列中。为了做到这一点,我需要首先使用适当的模式创建一个表。该阵列的架构标识符是ARRAY<T>,其中T是数据类型。如何将“字符串数组”添加为BigQuery的模式值

例如:TINT64替换为ARRAY<INT64>可以在该列中存储64位整型数组。我应该如何获得相同的效果,但要存储字符串值?我已经尝试过STRING,VARCHARCHAR

只是提到:我使用的最新google-cloud Python包

Documentation Reference for BigQuery Schema

+0

类似的问题:https://stackoverflow.com/questions/44341234/does-google-bigquery-supports-arraystring?rq=1 –

回答

2

In order to do that I need to first create a table with the proper schema.

只是在新的目标表的Web UI下方运行 - 创造必要的模式

#standardSQL 
SELECT ARRAY<STRING>[] AS array_of_strings 
+0

它标志着模式'repeated'而不是'nullable'我正在尝试。但是,那么'google-cloud'包无法在BigQuery中上传基于数组的数据,并出现以下错误:'google.cloud.exceptions.BadRequest:400无法加载具有重复字段的CSV数据。这应该作为一个GitHub项目回购问题打开? –

+0

如果你想将这些字符串作为数组存储 - 重复是你所需要的 - 这就是我最初阅读你的问题的方式。但如果你想把每个字符串存储为一个单独的行 - 这是不同的故事(并且更简单)。只是澄清你期望的结果。通常显示输入和期望的输出有助于在这种情况下 –

+0

感谢您的澄清。该列将包含与此类似的值:'['mobile','desktop']'。无需将它们存储为单独的行。在单个行+列中将多个值作为数组使用。 –

1

为了添加一个包含数组数据的列,您需要将该列的模式定义为repeatable。因此示例模式结束为:

{ 
    'name': 'array_of_strings', 
    'type': 'STRING', 
    'mode': 'repeatable' 
},{ 
    'name': 'array_of_floats', 
    'type': 'FLOAT', 
    'mode': 'repeatable' 
} 

这使得字段保存数组值。

注意:您应该知道,如果这是表的架构,那么您无法使用大查询的CSV导入功能,因为这是CSV文件格式的限制。您需要使用jsonavro格式。

Reference to the GitHub issue

相关问题