Ich denke, es gibt verschiedene Möglichkeiten, mit Python umzugehen, aber ich persönlich verwende BigQuery-Python, daher mache ich eine kurze Notiz.
$ pip install bigquery-python
https://github.com/tylertreat/BigQuery-Python/blob/master/README.md
Holen Sie sich die folgenden Informationen
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)
DATASET = 'spam'
if not client.check_dataset(DATASET):
client.create_dataset(DATASET)
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.)
//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
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", },
# ]
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
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/
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