2017-01-04 3 views
0

NestedフィールドとRepeatedフィールドを持つテーブルにレコードを挿入しようとしています。 STRUCTとARRAYキーワードはそれぞれStandard SQLで使用できることがわかっています。BigQuery Legacy SQL - ネストされたフィールドを持つテーブルに挿入するには?

レガシーSQLのSTRUCTおよびARRAYキーワードに相当するものは、レコードをネストされたフィールドと繰り返しフィールドに挿入するものですか?

+1

私は明白な質問をするでしょう...なぜこの目的のためにレガシーSQLを使用するのですか?クエリー結果のネストされたフィールドと繰り返しフィールドの作成には、かなり厳しい制限があります。 –

+0

@vetri - Elliotが述べているように、ソリューションでBigQueryで標準SQLを使用し、従来のSQLから抜け出すべきです。 –

+0

私は、標準SQLの利点を理解しています。したがって、標準SQLに移行します。皆さんありがとう。 – Vetri

答えて

2

私はあなたがbq command line tool - How to insert into Big query tables that has nested fields?

で提供された例を再利用しています、それは従来のSQLのためのものであり、従来のSQL
注用Javascript UDFのインラインバージョンを使用して、以下試してみてください:デフォルトでは、BigQueryのレガシーSQLは、任意の結果を平坦化するので、作ります

SELECT Employee_id, Name, Age, Department.*, Location.* FROM JS((
    SELECT Employee_id, Name, Age, Department_id, Department_Name, Department_Code, e.Location_id AS Location_id, Country, State, City 
    FROM (SELECT e.Employee_id AS Employee_id, e.Name AS Name, e.Age AS Age, 
     e.Department_id AS Department_id, d.Department_Name AS Department_Name, d.Department_Code AS Department_Code, e.Location_id AS Location_id 
    FROM Employee e JOIN Department d ON e.Department_id = d.Department_id) AS e 
    JOIN Location l ON e.Location_id = l.Location_id 
), 
// input columns 
Employee_id, Name, Age, Department_id, Department_Name, Department_Code, Location_id, Country, State, City, 
// output schema 
"[ 
    {'name': 'Employee_id', 'type': 'INTEGER', 'mode': 'NULLABLE'}, 
    {'name': 'Name', 'type': 'STRING', 'mode': 'NULLABLE'}, 
    {'name': 'Age', 'type': 'INTEGER', 'mode': 'NULLABLE'}, 
    {'name': 'Department', 'type': 'RECORD', 'mode': 'NULLABLE', 'fields': [ 
     {'name': 'Department_id', 'type': 'STRING', 'mode': 'NULLABLE'}, 
     {'name': 'Department_Name', 'type': 'STRING', 'mode': 'NULLABLE'}, 
     {'name': 'Department_Code', 'type': 'STRING', 'mode': 'NULLABLE'} 
    ]}, 
    {'name': 'Location', 'type': 'RECORD', 'mode': 'NULLABLE', 'fields': [ 
     {'name': 'Location_id', 'type': 'STRING', 'mode': 'NULLABLE'}, 
     {'name': 'Country', 'type': 'STRING', 'mode': 'NULLABLE'}, 
     {'name': 'State', 'type': 'STRING', 'mode': 'NULLABLE'}, 
     {'name': 'City', 'type': 'STRING', 'mode': 'NULLABLE'} 
    ]} 
]", 
// function 
"function(r, emit){ 
    emit({ 
    Employee_id: r.Employee_id, Name: r.Name, Age: r.Age, 
    Department: {Department_id:r.Department_id, Department_Name:r.Department_Name, Department_Code:r.Department_Code}, 
    Location: {Location_id:r.Location_id, Country:r.Country, State:r.State, City:r.City} 
    }); 
}" 
) 

あなたが先テーブルを設定し、trueに Allow Large Resultsを設定(またはWeb UIでそれを確認してください)と Flatten Results falseに(またはWeb UIでそれをオフに)必ずご注意:私はここUDFのインラインバージョンを使用しています簡単にするために表示とテスト。インラインバージョンは推奨されておらず、公式にはサポートされていません。しかし、サポートされているバージョンに簡単に変換することができます。 User-Defined Functions in Legacy SQL

P.S.標準SQLがオプションになる前に、これまでの作業は大変助かりましたが、今はStandard SQLをよりエレガントにして、レガシーSQLを使用する大きな理由は何ですか?フィールド

+0

ありがとうございます。 BigQueryとの接続にtableau 9.3を使用していますが、標準SQLをサポートしていないようです。助言がありますか? – Vetri

+1

Tableauバージョン9.3では、それを超えて何かにアップグレードすることを望んでいません。たとえば、[Tableauのアップグレードガイド](http://www.tableau.com/support/server-upgrade)を読むことができます。そのバージョンのTableauは6ヶ月以上前にリリースされました。 –

+0

Tableauをバージョン10.1にアップグレードし、追加機能を備えたBigQuery Standard SQLを使用します。皆さんありがとう。 – Vetri

関連する問題