[PYTHON]

Google Cloud Python Client https://github.com/GoogleCloudPlatform/gcloud-python

Vorbereitung

Dienstkontoeinstellungen

Es ist erforderlich, ein GCP-Dienstkonto einzurichten und json zur Authentifizierung im Voraus zu erhalten.

Für Details suchen Sie einfach nach "GCP-Dienstkonto" usw.

Installation des gcloud-Pakets

Es sollte in einem Schuss mit Pip kommen.

pip install gcloud

Code

Speichern Sie Folgendes und führen Sie es mit python -u upload.py aus. Tabulatortrennzeichen, die erste Zeile ist die Kopfzeile. Wenn bereits eine Tabelle mit demselben Namen vorhanden ist, wird sie als gelöscht festgelegt. Ändern Sie sie daher entsprechend.

upload.py


from gcloud import bigquery
from gcloud.bigquery import SchemaField

json_key = '/my-folder/my-project-xxxxxxxxxxxx.json'
project_name = 'my-project-1234'
dataset_name = 'my-dataset'


def run():
    schema = [
        SchemaField('Col1', 'INTEGER', mode='required'),
        SchemaField('Col2', 'BOOLEAN', mode='required'),
        SchemaField('Col3', 'STRING', mode='nullable'),
        SchemaField('Col3', 'FLOAT', mode='nullable'),
    ]
    input_file_path = '/my-folder/input.txt'
    header_rows_to_skip = 1
    table_name = 'MyTable'
    csv_delimiter = '\t'
    delete_existing_table = True
    upload_one_csv_to_bq(input_file_path, csv_delimiter, header_rows_to_skip, table_name, schema, delete_existing_table)


def upload_one_csv_to_bq(local_csv_file_path, delimiter, header_rows_to_skip, 
                         table_name, table_schema, delete_existing_table):
    client = bigquery.Client.from_service_account_json(json_key, project=project_name)
    dataset = client.dataset(dataset_name)
    table = dataset.table(name=table_name)
    if delete_existing_table:
        if table.exists():
            print 'Delete existing table: ' + table_name
            table.delete()
    table.schema = table_schema
    table.create()
    with open(local_csv_file_path, 'rb') as file_obj:
        table.upload_from_file(file_obj, 'CSV', field_delimiter=delimiter, skip_leading_rows=header_rows_to_skip, ignore_unknown_values=False)
    print 'Done'


###########
# Entry Point
###########
if __name__ == "__main__":
    run()

Es funktionierte mit Python 2.7.10 unter Amazon Linux 2016.03 und Python 2.7.11 in meinen Fenstern. Sie können mit UTF-8 arbeiten, auch wenn die Daten Japanisch enthalten.

Beiseite

Zuerst habe ich es getan, während ich mir das Folgende angesehen habe, das entsprechend herausgekommen ist (Einfügen von Daten (synchron)), aber es funktioniert unter Windows, aber wenn ich es zu EC2 bringe, ist es "table.insert_data (rows) # API request" Es liegt ein unangenehmer Fehler wie "Rohrbruch" vor.

https://googlecloudplatform.github.io/gcloud-python/stable/bigquery-usage.html

Also in Form von table.upload_from_file nach verschiedenen Umwegen. Wenn Sie ein Problem haben, empfehle ich, den Code aufzugeben und zu lesen

https://github.com/GoogleCloudPlatform/gcloud-python/tree/master/gcloud/bigquery

Recommended Posts