2017-03-12 14 views

答えて

1

BigQueryでテーブルを作成する1つの方法は、API呼び出しを使用することです。 CREATEテーブル構文はありません。テーブル

BigQueryの作成

新しいテーブルas detailed hereを作成するためのさまざまな方法を提供しています:

    あなたは、コマンドラインツールのBQのMKコマンドを使用するかのBigQuery APIテーブルを使用して空のテーブルを作成することができます
  • .insert()メソッド。
  • CSVまたはJSONデータファイル(圧縮または非圧縮)、Avroファイル、またはCloud Datastoreバックアップからテーブルを読み込むことができます。
  • クエリ結果からテーブルを作成できます。
  • あなたはあなたがあなたのテーブルのスキーマを定義するときは、標準のSQL型を使用することができます
  • クラウドストレージ内のファイルの上にテーブルを定義することができます(Elliotts答えを参照)、更新する程度tichetがある
  • テーブルをコピーすることができますドキュメントでも同様です。投票/星herePython samples are on GitHub

たくさんの簡単なよう:

def create_table(dataset_name, table_name, project=None): 
    """Creates a simple table in the given dataset. 
    If no project is specified, then the currently active project is used. 
    """ 
    bigquery_client = bigquery.Client(project=project) 
    dataset = bigquery_client.dataset(dataset_name) 

    if not dataset.exists(): 
     print('Dataset {} does not exist.'.format(dataset_name)) 
     return 

    table = dataset.table(table_name) 

    # Set the table schema 
    table.schema = (
     bigquery.SchemaField('Name', 'STRING'), 
     bigquery.SchemaField('Age', 'INTEGER'), 
     bigquery.SchemaField('Weight', 'FLOAT'), 
    ) 

    table.create() 

    print('Created table {} in dataset {}.'.format(table_name, dataset_name)) 
+0

もっと多くのポインタをありがとうが、この例では 'STRUCT'型や' ARRAY'型の使用については触れていません。私は[bigquery.SchemaField'の実装を確認しました](https://github.com/GoogleCloudPlatform/google-cloud-python/blob/44b4d50e59f5d5ace419dcfbe2b04c2e07cadc57/bigquery/google/cloud/bigquery/schema.py#L24-L26 )、ドキュメントは明らかにレガシーSQLに関するものです。 – errordeveloper

+1

あなたは少し混乱しています。したがって、SQLは、定義されたテーブルではないクエリにのみ使用されます。テーブルを作成するときは、そこにリストされているタイプを使用する必要があります。これはレガシーでも標準SQLでもなく、フィールド型のAPI定義です。テーブルを定義するときにJSONにリストされているタイプを使用し、標準SQLクエリを書くときは、単純に構造体または配列としてRECORDまたはREPEATEDの定義済みフィールドタイプを使用できます。 – Pentium10

+0

ありがとう、ありがとう!これは理にかなっていますが、私はそれがより具体的に文書化されるべきだと考えています。新しいユーザーとしては、すでに2つの異なる言語バージョンを知っておく必要があります。 – errordeveloper

2

あなたは、標準のSQLタイプを使用してスキーマを持つテーブルを作成することができます。ここでは、有効なスキーマの例です。

{ 
    "a": "ARRAY<STRUCT<x INT64, y STRING>>", 
    "b": "STRUCT<z DATE>", 
    "c": "INT64" 
} 

あなたは、このようなsample_schema.jsonとしてファイルにこれを入れた場合、あなたはbq mkを使用して、それから、テーブルを作成することができます。

bq mk --schema sample_schema.json -t your_dataset.YourTableName 

bqクライアントの外では、 tables.insert APIは、標準のSQL型名もサポートしています。

+0

これは文書化されていない機能ですか?ライブラリで実装されているJSONの検証には合格しません。 – Pentium10

+0

私は 'INT64'を引用するつもりでした。あなたが何を指しているのですか?それ以外の値は単なる文字列です。 –

+0

しかし、これはどこかで文書化されていますか? – Pentium10

関連する問題