BigQuery-Python war nützlich, wenn Sie mit BigQuery aus Python arbeiten

Ich denke, es gibt verschiedene Möglichkeiten, mit Python umzugehen, aber ich persönlich verwende BigQuery-Python, daher mache ich eine kurze Notiz.

Installation

$ pip install bigquery-python

Dokument

https://github.com/tylertreat/BigQuery-Python/blob/master/README.md

Vorbereitung

Holen Sie sich die folgenden Informationen

Einfaches Beispiel

Holen Sie sich BigQueryClient

from bigquery import get_client

PROJECT_ID = 'project-999'
SERVICE_ACCOUNT = '[email protected]'
PRIVATE_KEY_PATH = '/path.to/keyfile.p12'

with open(PRIVATE_KEY_PATH, 'rb') as f:
    private_key = f.read()

client = get_client(PROJECT_ID,
                    private_key=private_key,
                    service_account= SERVICE_ACCOUNT,
                    readonly=False)

Datensatz erstellen

DATASET = 'spam'

if not client.check_dataset(DATASET):
    client.create_dataset(DATASET)

Eine Tabelle erstellen

schema.json


[
  {
    "name": "id",
    "type": "INTEGER"
  },
  {
    "name": "name",
    "type": "STRING"
  },
  {
    "name": "time",
    "type": "TIMESTAMP"
  }
]
DATASET = 'spam'
TABLE_NAME = 'egg'
SCHEMA_PATH = '/path.to/schema.json'

with open(SCHEMA_PATH, 'r') as f:
    table_schema = json.load(f)

if not client.check_dataset(DATASET):
    raise

if not client.check_table(DATASET, TABLE_NAME):
	client.create_table(DATASET, TABLE_NAME, table_schema)

(Es ist nicht erforderlich, das Schema auf json zu setzen, aber es scheint, dass es wiederverwendet werden kann, also wird es diesmal auf json gesetzt.)

Import aus Google Cloud Storage

//spam/egg.csv


"id", "name", "time"
1, "S", "2015-05-18 00:00:00"
2, "Y", "2015-11-02 00:00:00"
from bigquery import JOB_SOURCE_FORMAT_CSV

KEY_NAME = 'gs://spam/egg.csv'
TABLE_NAME = 'egg'

client.import_data_from_uris(
    TABLE_NAME,
    KEY_NAME,
    field_delimiter='\t',  #Tabulator begrenzt
    source_format=JOB_SOURCE_FORMAT_CSV,  # csv
    skip_leading_rows=1)  #Überspringen Sie die erste Zeile von csv

Abfrage ausführen

Geben Sie "Timeout" an, um es synchron abzurufen. Wenn es länger dauert, tritt eine "BigQueryTimeoutException" auf.

from bigquery.errors import BigQueryTimeoutException

query = 'SELECT id, name, time FROM [spam.egg] LIMIT 10'

try:
    job_id, results = client.query(query, timeout=60)
except BigQueryTimeoutException as e:
    print e

# job_id: u'job_xxxx_xxxxx'
# results: [
#    {u'id': 1, u'name': 'S',  u'time': "2015-11-02 00:00:00", }, 
#    {u'id': 2, u'name': 'Y',  u'time': "2015-11-02 00:00:00", }, 
# ]

Wenn es einige Zeit zu dauern scheint, können Sie es asynchron erwerben. Geben Sie in diesem Fall kein Timeout an.

query = 'SELECT id, name, time FROM [spam.egg] LIMIT 10'
job_id, results = client.query(query)

# job_id: u'job_xxxx_xxxxx'
# results: []

Da job_id ausgegeben wird, können Sie den Inhalt abrufen, indem Sie job_id in das Argument get_query_rows einfügen.

completed, _total_rows = client.check_job(job_id)

if completed:
    results = client.get_query_rows(job_id)

# results: [
#    {u'id': 1, u'name': 'S',  u'time': "2015-11-02 00:00:00", }, 
#    {u'id': 2, u'name': 'Y',  u'time': "2015-11-02 00:00:00", }, 
# ]

Andere

Darüber hinaus können Sie sehen, dass Sie verschiedene Dinge tun können, indem Sie in den BigQuery-Client schauen.

Query Builder

Es gibt auch einen Mechanismus, der eine nette Abfrage durch Aufrufen von "render_query" macht. Wenn ich es verwendet hätte, wäre es vielleicht ein schlechter Weg gewesen, es zu finden, aber ich konnte keine Funktionen ausführen, die nur für BigQuery gelten, wie das Hinzufügen von "LIMIT", Tischdekorateur und "JSON_EXTRACT", sodass ich diesen Bereich selbst schreiben musste. Es scheint ein Muss zu sein. https://github.com/tylertreat/BigQuery-Python#query-builder

Google API-Dokumentation

Da die Basis die Google-API ist, kann die API-Dokumentation von Google je nach Situation hilfreich sein. https://cloud.google.com/bigquery/docs/reference/v2/

Betrieb in einer Linux-Umgebung

Wenn Sie die Schlüsseldatei mit der hier beschriebenen Methode behandeln, kann ein Fehler bei der Behandlung der Verschlüsselung in der Linux-Umgebung auftreten. Bei der Installation von BigQuery-Python werden die abhängigen Python-Bibliotheken gleichzeitig installiert. In der Linux-Umgebung gibt es jedoch keine abhängigen Tools und diese werden möglicherweise nicht installiert. Eine davon ist eine Bibliothek namens "Kryptographie".

BigQuery - Ich versuche, "ImportError" in Python abzufangen und eine andere Bibliothek zu verwenden. Wenn dies jedoch nicht funktioniert, wird beim Ausführen des Skripts eine Fehlermeldung angezeigt, was ärgerlich ist. Die Installation von "Kryptographie" selbst kann unten installiert werden.

$ pip install cryptography

Dafür müssen Sie jedoch die abhängigen Tools mit yum etc. installieren. Wie in der Dokumentation beschrieben, habe ich in meiner Umgebung Folgendes ausgeführt:

$ sudo yum install gcc libffi-devel python-devel openssl-devel

Kryptografiedokumentation http://cryptography.readthedocs.org/en/latest/installation/

Recommended Posts

BigQuery-Python war nützlich, wenn Sie mit BigQuery aus Python arbeiten
Bearbeiten von Azure CosmosDB aus Python Part.2
Verwenden Sie BigQuery aus Python.
Arbeiten mit Azure CosmosDB aus Python (Schnellstart)
Stellen Sie mit Python eine Verbindung zu BigQuery her
Betreiben Sie LibreOffice mit Python
Nützlich beim Debuggen mit TouchDesigner
Python: Arbeiten mit Firefox mit Selen
Umgang mit Sounds in Python
Fehler beim Spielen mit Python
Mit Skype benachrichtigen Sie mit Skype von Python!
Problem, Parameter beim Umgang mit Blender aus Python nicht zu kennen
Xpath-Zusammenfassung beim Extrahieren von Daten von einer Website mit Python Scrapy
Beispielcode-Zusammenfassung bei der Arbeit mit Google-Tabellen von Google Colab
Rufen Sie C von Python mit DragonFFI auf
Verwenden von Rstan aus Python mit PypeR
Arbeiten mit LibreOffice in Python: Importieren
Installieren Sie Python von der Quelle mit Ansible
Tipps, die Sie beim Programmieren in Python2 kennen sollten (nützliche Bibliothek)
Führen Sie Aprili von Python auf Orange aus
Rufen Sie Python von Nim mit Nimpy auf
Vorsichtsmaßnahmen bei der Verwendung von Phantomjs aus Python
Wenn matplotlib nicht mit python2.7 funktioniert
Laden Sie fbx aus Python mitinema4d
Bei Verwendung von MeCab mit virtualenv python
Vorsichtsmaßnahmen bei Verwendung von sechs mit Python 2.5
Arbeiten mit DICOM-Bildern in Python
[Python] Format, wenn to_csv mit Pandas
Umgang mit OAuth2-Fehlern bei Verwendung von Google APIs aus Python
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Sammeln von Informationen von Twitter mit Python (Twitter API)
Empfangen Sie Textdaten von MySQL mit Python
Holen Sie sich HTML von Element mit Python-Selen
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Snippet für die Vollbit-Suche mit Python
Spielen Sie eine Audiodatei von Python mit Interrupt ab
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Versuchen Sie, mit Binärdaten in Python zu arbeiten
Hinweise beim Erstellen einer Umgebung mit Python
Tweet von Python mit Twitter Developer + Tweepy
Zu beachtende Punkte bei der Lösung von DP-Problemen mit Python
So arbeiten Sie mit BigQuery in Python
Geschäftseffizienz von Grund auf mit Python
Mit openssl verschlüsselte Dateien werden mit openssl aus Python entschlüsselt
Arbeiten mit OpenStack mit dem Python SDK
Bildaufnahme von der Kamera mit Python + OpenCV
Erste Schritte mit Dynamo von Python Boto
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Scraping von einer authentifizierten Site mit Python
Bearbeiten Sie BigQuery-Tabellen von einem Python-Client aus
Verwenden von C ++ - Funktionen aus Python mit pybind11
Arbeiten mit GPS in Python für Raspberry Pi 3
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Ein Hinweis, dem ich beim Ausführen von Python mit Visual Studio Code verfallen war
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Fehler beim Installieren eines Moduls mit Python pip
Sammeln von Informationen von Twitter mit Python (Umgebungskonstruktion)
CSV-Ausgabe der Google-Suche mit [Python]! 【Einfach】