[PYTHON] J'ai regardé les méta-informations de BigQuery et essayé de les utiliser

introduction

BigQuery est très pratique, n'est-ce pas? Pour le moment, vous pouvez insérer des tables, les agréger à grande vitesse, et même l'apprentissage automatique à l'aide de BigQuery ML, etc., ne peut être effectué qu'avec BigQuery.

Il est pratique à utiliser et lorsque je le remarque, divers ensembles de données et tables ont été créés. Il semble que les méta-informations puissent être vues en utilisant INFORMATION_SCHEMA.

Cette fois, nous allons organiser comment utiliser INFORMATION_SCHEMA et d'autres méta-informations.

Comment lire les méta-informations

Obtenir une liste d'ensembles de données pour un projet particulier

La première consiste à spécifier un projet et à obtenir une liste des ensembles de données à l'intérieur.


SELECT * FROM `myproject.INFORMATION_SCHEMA.SCHEMATA`

Les éléments suivants sont affichés.

--catalog_name: nom du projet --schema_name: nom de l'ensemble de données --schema_owner: nom du propriétaire? (Tous étaient nuls) --creation_time: date et heure de création --last_modified_time: date et heure modifiées --location: emplacement de stockage

C'était dommage que le nom du propriétaire soit Null. Ce serait très facile à gérer si vous saviez qui a créé l'ensemble de données. .. .. Y a-t-il un moyen de le mettre?

Obtention d'une liste de tables pour un projet / ensemble de données spécifique 1

Ensuite, projet: comment spécifier le jeu de données et obtenir la liste des tables à l'intérieur.

SELECT * FROM `myproject.mydataset.INFORMATION_SCHEMA.TABLES`

Les éléments suivants sont affichés.

--table_catalog: nom du projet --table_schema: nom de l'ensemble de données --table_name: nom de la table --table_type: table ou VIEW ou table xref --is_insertable_into: Pouvez-vous INSÉRER? --is_typed: Inconnu (y a-t-il autre chose que Non?) --creation_time: date et heure de création

Je ne comprends pas la signification de is_insertable_into. Il ne semble y avoir aucun élément autre que Oui pour le tableau et Non pour VIEW. Dans ce cas, table_type suffit. .. ..

Obtention d'une liste de tables pour un projet / ensemble de données spécifique 2

De même, Project: Comment obtenir une liste de tables à l'intérieur en spécifiant un ensemble de données. Les éléments qui sont produits sont légèrement différents

SELECT * FROM `myproject.mydataset.__TABLES__`

--project_id: nom du projet --dataset_id: nom de l'ensemble de données --table_id: nom de la table --creation_time: date et heure de création --last_modified_time: date et heure modifiées --row_count: nombre de lignes --size_bytes: taille des données --Type: 1 pour la table, 2 pour la vue

Il est désagréable que le nom soit légèrement différent en fonction des méta-informations que vous voyez. Il peut s'agir de catalog_name, table_catalog ou project_id pour faire référence au même nom de projet. Est-il utilisé correctement dans BigQuery?

Obtention d'une liste de tables pour un projet / ensemble de données spécifique 3

Vous pouvez également consulter des informations supplémentaires sur la table dans INFORMATION_SCHEMA.

SELECT * FROM `myproject.mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS`

Les éléments suivants sont affichés.

--table_catalog: nom du projet --table_schema: nom de l'ensemble de données --table_name: nom de la table --table_type: table ou VIEW ou table xref

Il est difficile de comprendre ce que dit l'option pendant un moment, mais option_name contient "expiration_timestamp", option_type contient "TIMESTAMP" et option_value contient la date et l'heure, et ces trois éléments sont un ensemble.

Il y avait aussi des descriptions et des étiquettes.

Obtenir la liste des tableaux + la liste des colonnes de l'ensemble de données de projet

Plus vous avez de tables, plus vous avez de résultats.

SELECT * FROM `myproject.mydataset.INFORMATION_SCHEMA.COLUMNS`

--table_catalog: nom du projet --table_schema: nom de l'ensemble de données --table_name: nom de la table --column_name: nom de la colonne --ordinal_position: numéro de colonne --is_nullable: Null est-il correct? --data_type: type de données

Celles qui n'ont pas de commentaire sont les colonnes qui ne contiennent que JAMAIS ou Null. Je n'ai pas compris le sens des colonnes.

Essayez d'utiliser une combinaison de méta-informations

Je souhaite calculer le montant de facturation pour chaque ensemble de données d'un projet en combinant des méta-informations.

import pandas as pd

query="SELECT schema_name FROM `myproject.INFORMATION_SCHEMA.SCHEMATA`"
df = pd.read_gbq(query, project_id='myproject', dialect="standard")

df_output = pd.DataFrame()

query="""
SELECT 
 "{dataset}" AS dataset, 
 SUM(size_bytes) / 1000000000 AS DataSize, 
 0.020 * SUM(size_bytes) / 1000000000 AS Cost 
FROM `myproject.{dataset}.__TABLES__`
GROUP BY dataset"""

for i, dataset in df.iterrows():
  d = pd.read_gbq(query.format(dataset=dataset[0]), project_id='myproject',dialect="standard")
  
  df_output=df_output.append(d)

Les frais de stockage BQ sont de 0,02 USD par Go pour "Frais BigQuery". Pour le stockage à long terme, cela coûte 0,01 USD, donc la facture réelle peut être un peu moins chère que le résultat.

en conclusion

J'ai résumé les méta-informations de BigQuery. Puisqu'il y a diverses méta-informations, il semble y en avoir d'autres, mais pour le moment, je vais publier celles que j'utilise souvent. Cependant, il y a des objets mystérieux, je dois donc étudier un peu plus.

Recommended Posts

J'ai regardé les méta-informations de BigQuery et essayé de les utiliser
J'ai essayé d'utiliser l'API BigQuery Storage
J'ai essayé d'utiliser PyCaret à la vitesse la plus rapide
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé d'utiliser BigQuery ML
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de refactoriser le modèle CNN de TensorFlow en utilisant TF-Slim
J'ai essayé la reconnaissance faciale du problème du rire en utilisant Keras.
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
J'ai essayé le serveur asynchrone de Django 3.0
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
zoom J'ai essayé de quantifier le degré d'excitation de l'histoire lors de la conférence
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
En utilisant COTOHA, j'ai essayé de suivre le cours émotionnel de la course aux meros.
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
J'ai essayé la fonction de tableau croisé dynamique des pandas
J'ai essayé l'analyse par grappes de la carte météo
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de prédire la détérioration de la batterie lithium-ion en utilisant le SDK Qore
J'ai essayé de notifier la mise à jour de "Hameln" en utilisant "Beautiful Soup" et "IFTTT"
[Python] J'ai essayé de juger l'image du membre du groupe d'idols en utilisant Keras
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Je n'ai pas compris le redimensionnement de TensorFlow, alors je l'ai résumé visuellement.
J'ai essayé d'obtenir les informations du site .aspx qui est paginé à l'aide de Selenium IDE aussi sans programmation que possible.
J'ai essayé d'utiliser paramétré
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser la mimesis
J'ai essayé d'utiliser anytree
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé le tutoriel MNIST de tensorflow pour les débutants.
J'ai essayé d'utiliser aiomysql
J'ai essayé de faire sonner le téléphone lorsqu'il a été publié sur le poste IoT
J'ai essayé d'utiliser Summpy
Python pratique 100 coups J'ai essayé de visualiser l'arbre de décision du chapitre 5 en utilisant graphviz
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser Pipenv
J'ai essayé d'utiliser matplotlib
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser openpyxl
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
J'ai essayé d'utiliser Ipython