2017-08-01 7 views
0

BigQueryテーブルの1つからメタデータ(テーブル構造)をフェッチする必要があり、新しいテーブルを作成します。たとえば、table 'Metadata' contains some table structuresとなります。BigQueryでテーブルを作成するときに "TypeError: 'SchemaField'オブジェクトが反復不可能なのはなぜですか?

私のPythonスクリプトFileSubtypeは、他のスクリプトから動的に渡され、それに基づいて、列名とそれに対応するデータ型がフェッチされます。これらの列とデータ型で新しい表が作成されます。

スタック部分は、これらのすべてが動的でなければなりません。

サンプルコード(テスト目的のために、私はテーブル名をハードコードしている):

query1 = client.run_sync_query('%s limit 10' % QUERY) 
query1.run() 
rows = list(query1.fetch_data()) 
table = dataset.table('Sample_BQ_Table1') 
for row in rows: 
     print(row[0]) 
# Set the table schema 
     table.schema = (
      bigquery.SchemaField(row[0], 'STRING'), 
      ) 
table.create() 

テーブルスキーマを設定しながら、私はエラーに

TypeError: 'SchemaField' object is not iterable`

に直面しています。

+0

実際に私のpythonスクリプトを実行中にエラーが発生しています: ** TypeError: 'SchemaField'オブジェクトは反復可能ではありません** – GaurangR

+1

'bigquery.SchemaField(...)'の後ろにカンマあなたのコード?エラーメッセージは、そうでないことを示します。 –

答えて

2

table.schemaフィールドには、リストまたはタプルなどのiterableが必要です。平野括弧はタプルを作成しないため

コード

table.schema = (
    bigquery.SchemaField(row[0], 'STRING') 
) 

は、反復可能としてスキーマを設定していないでしょう。正しいコードは

table.schema = (
    bigquery.SchemaField(row[0], 'STRING'), 
) 

です。末尾のカンマに注意してください。

+0

末尾にカンマがある場合のThx。 – crgt

関連する問題