BigQuery-Python s'est avéré utile lors de l'utilisation de BigQuery à partir de Python

Je pense qu'il existe plusieurs façons de le gérer à partir de Python, mais j'utilise personnellement BigQuery-Python, je vais donc faire une brève note.

Installation

$ pip install bigquery-python

document

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

Préparation

Obtenez les informations suivantes

--Compte de service --Fichier clé (p12 ou pem)

Exemple simple

Obtenez 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)

Créer un jeu de données

DATASET = 'spam'

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

Créer une table

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)

(Il n'est pas nécessaire de définir le schéma sur json, mais il semble qu'il puisse être réutilisé, donc cette fois, il est défini sur json.)

Importer depuis 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',  #Onglet délimité
    source_format=JOB_SOURCE_FORMAT_CSV,  # csv
    skip_leading_rows=1)  #Passer la première ligne de csv

Exécuter l'ordre

Spécifiez timeout pour l'obtenir de manière synchrone. Si cela prend plus de temps, une "BigQueryTimeoutException" se produira.

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", }, 
# ]

Si cela semble prendre du temps, vous pouvez envisager de l'acquérir de manière asynchrone. Dans ce cas, ne spécifiez pas «timeout».

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

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

Puisque job_id est émis, vous pouvez obtenir le contenu en mettant job_id dans l'argument de get_query_rows.

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", }, 
# ]

Autre

En outre, vous pouvez voir que vous pouvez effectuer diverses choses en regardant à l'intérieur du client BigQuery.

Query Builder

Il existe également un mécanisme qui fait une belle requête en appelant render_query. Si je l'ai utilisé, cela aurait peut-être été un mauvais moyen de le trouver, mais je ne pouvais pas gérer les fonctions propres à BigQuery, telles que l'ajout de LIMIT, d'un décorateur de table et de JSON_EXTRACT, j'ai donc dû écrire cette zone moi-même. Cela semble être un must. https://github.com/tylertreat/BigQuery-Python#query-builder

Documentation de l'API Google

Étant donné que la base est l'API de Google, la documentation de l'API de Google peut être utile en fonction de la situation. https://cloud.google.com/bigquery/docs/reference/v2/

Fonctionnement dans un environnement Linux

Si vous gérez le fichier de clé par la méthode décrite ici, une erreur peut se produire dans la gestion liée au chiffrement dans l'environnement Linux. Lors de l'installation de BigQuery-Python, les bibliothèques Python dépendantes sont installées en même temps, mais dans l'environnement Linux, il n'y a pas d'outils dépendants et il se peut qu'ils ne soient pas installés. L'un d'eux est une bibliothèque appelée «cryptographie».

BigQuery - J'essaie d'attraper ʻImportError` dans Python et d'utiliser une autre bibliothèque, mais si cela ne fonctionne pas, j'obtiens une erreur lors de l'exécution du script, ce qui est ennuyeux. L'installation de «cryptographie» elle-même peut être installée ci-dessous.

$ pip install cryptography

Cependant, pour cela, vous devez installer les outils dépendants avec yum etc. Comme détaillé dans la documentation, j'ai effectué les opérations suivantes dans mon environnement:

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

Documentation sur la cryptographie http://cryptography.readthedocs.org/en/latest/installation/

Recommended Posts

BigQuery-Python s'est avéré utile lors de l'utilisation de BigQuery à partir de Python
Manipulation d'Azure CosmosDB à partir de Python Part.2
Utilisez BigQuery depuis Python.
Utilisation d'Azure CosmosDB à partir de Python (démarrage rapide de l'exploration)
Connectez-vous à BigQuery avec Python
Exploitez LibreOffice avec Python
Utile lors du débogage avec TouchDesigner
Python: travailler avec Firefox avec du sélénium
Gérer les sons en Python
Erreur lors de la lecture avec python
Avec skype, notifiez avec skype de python!
Problème de ne pas connaître les paramètres lors de l'utilisation de Blender à partir de Python
Résumé Xpath lors de l'extraction de données d'un site Web avec Python Scrapy
Exemple de résumé de code lorsque vous travaillez avec des feuilles de calcul Google de Google Colab
Appeler C depuis Python avec DragonFFI
Utilisation de Rstan de Python avec PypeR
Travailler avec LibreOffice en Python: import
Installez Python à partir des sources avec Ansible
Conseils à connaître lors de la programmation de compétitions avec Python2 (bibliothèque utile)
Exécutez Aprili depuis Python sur Orange
Appelez python de nim avec Nimpy
Précautions lors de l'utilisation de phantomjs de python
Quand matplotlib ne fonctionne pas avec python2.7
Charger fbx depuis python avec cinema4d
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
Travailler avec des images DICOM en Python
[Python] Formater quand to_csv avec des pandas
Comment gérer l'erreur OAuth2 lors de l'utilisation des API Google à partir de Python
Utilisez Python de Java avec Jython. J'étais aussi accro.
Collecter des informations sur Twitter avec Python (API Twitter)
Recevoir des données textuelles de mysql avec python
Obtenir le code HTML de l'élément avec du sélénium Python
[Note] Obtenir des données de PostgreSQL avec Python
Extrait de code pour une recherche de bits complète avec python
Lire un fichier audio à partir de Python avec interruption
Créez wordcloud à partir de votre tweet avec python3
Essayez de travailler avec des données binaires en Python
Remarques lors de la création d'un environnement avec python
Tweet de python avec Twitter Developer + Tweepy
Points à noter lors de la résolution de problèmes DP avec Python
Comment utiliser BigQuery en Python
Efficacité commerciale à partir de zéro avec Python
Décrypter les fichiers cryptés avec openssl depuis python avec openssl
Travailler avec OpenStack à l'aide du SDK Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Premiers pas avec Dynamo de Python boto
Essayez d'appeler Python depuis Ruby avec une économie
Scraping depuis un site authentifié avec python
Manipuler des tables BigQuery à partir d'un client Python
Utilisation des fonctions C ++ de python avec pybind11
Travailler avec le GPS en Python pour Raspberry Pi 3
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Erreur lors de l'installation d'un module avec Python pip
Collecter des informations depuis Twitter avec Python (construction de l'environnement)
Sortie CSV de la recherche Google avec [Python]! 【Facile】