2017-07-25 22 views
0

BigQueryの単一の列に文字列値の配列を格納したいとします。これを行うには、まず適切なスキーマを持つ表を作成する必要があります。配列のスキーマ識別子はARRAY<T>です。ここで、Tがデータ型です。BigQueryのスキーマ値として「配列の文字列」を追加する方法

たとえば、TINT64と置き換えた場合、ARRAY<INT64>は、その列に64ビット整数配列を格納できるようにします。どのように私はこの同じ効果を得るが、文字列値を格納する必要がありますか?私はすでにSTRINGVARCHARおよびCHARを試しました。

ちょうど言及:私はちょうど新しい送信先テーブルを使用してWeb UIに以下の実行最新google-cloudのpythonパッケージ

Documentation Reference for BigQuery Schema

+0

同様の質問:それはrepeated' 'としてモードではなく' nullable'をマーク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.

を使用しています -

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

私はそれを試していた。しかし、 'google-cloud'パッケージは、' google.cloud.exceptions.BadRequest:400繰り返しフィールドを持つCSVデータを読み込めません.'というエラーで、配列ベースのデータをBigQueryにアップロードできません。これはGitHubプロジェクトレポの問題として開かれるべきですか? –

+0

これらの文字列を配列として保存したい場合は、必要なものを繰り返します。これが最初の質問の読み方です。それぞれの文字列を別々の行として保存したいのであれば、これは別の話です(もっと単純なものです)。あなたが期待している結果を明らかにするだけです。そのような場合には通常入力と望ましい出力が役立ちます –

+0

説明をありがとうございます。カラムには、これに似た値が含まれます: '['mobile'、 'desktop']'。それらを別々の行として格納する必要はありません。単一の行+列に複数の値を配列として格納します。 –

1

必要なスキーマを作成します配列データを含む列を追加するには、その列のモードをとして定義する必要があります。したがって、サンプルスキーマは次のようになります。

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

これは、フィールド保持配列の値を作成します。

注:これがテーブルのスキーマである場合、これはCSVファイル形式の制限事項であるため、大きなクエリのCSVインポート機能を使用できないことに注意してください。 jsonまたはavroの形式を使用する必要があります。

Reference to the GitHub issue