[PYTHON] Comment insérer par lots un fichier CSV vers un hyperfichier Tableau avec la commande COPY de type PostgreSQL

Pour une raison quelconque, lorsque j'ai consulté la Référence de l'API du SDK Tableau, j'ai trouvé la description suivante. J'ai été surpris.

Insert Data Directly from CSV Files

N'importe quoi, ** Vous pouvez utiliser la commande COPY de type PostgreSQL pour insérer rapidement des enregistrements dans un hyperfichier, qui est le format de données unique de Tableau **.

Il y a quelques années, j'ai implémenté un processus pour créer un fichier tde à partir d'un fichier CSV afin de distribuer Tableau Reader régulièrement, mais en raison des spécifications du SDK, il s'agit d'une insertion pour chaque enregistrement, donc de traiter une grande quantité de données J'ai l'impression que cela a pris du temps. Cependant, si vous pouvez insérer directement avec la commande COPY, il semble que vous puissiez rapidement créer votre propre fichier Tableau (hyper dans ce cas) même avec une grande quantité de données.

Cette fois, je vais insérer les données d'entraînement (fichier CSV) de l'ensemble de données Titanic de Kaggle dans l'hyper fichier à l'aide de la commande COPY.

Cliquez-ici pour le code https://github.com/yolo-kiyoshi/csv2hyper

supposition

Le _API complet peut être installé avec pip install tableau hyperapi. _

Structure du répertoire

Il s'exécute dans le répertoire suivant. Le fichier .hyper est créé sous data /.

Structure du répertoire


.
├── data
│   └── train.csv # Titanic train
└── notebook
    └── insert_test.ipynb

Code d'implémentation

Tout d'abord, définissez le fichier d'E / S.

#Insérer le chemin du fichier CSV source
src_path = '../data/train.csv'
#Hyper chemin du fichier que vous souhaitez créer
dist_path = '../data/train.hyper'

Puis insérez de CSV à hyper avec la commande COPY. C'est une explication approximative, mais c'est comme "(1) créer une session pour traiter les hyperfichiers", "(2) créer une table virtuelle de type PostgreSQL", "(3) insérer tout à la fois à partir d'un fichier CSV", et "(4) cracher la table entière dans un hyperfichier".

from tableauhyperapi import HyperProcess, Telemetry, Connection, CreateMode, NOT_NULLABLE, NULLABLE, SqlType, TableDefinition, escape_string_literal

#Créer une session pour travailler avec des fichiers Hyper
with HyperProcess(telemetry=Telemetry.SEND_USAGE_DATA_TO_TABLEAU) as hyper:
     with Connection(
         endpoint=hyper.endpoint,
         database=dist_path,
         create_mode=CreateMode.CREATE_AND_REPLACE
     ) as connection:
            #Définir la table
            table_def = TableDefinition(
                table_name='train',
                columns=[
                TableDefinition.Column("PassengerId", SqlType.big_int(), NOT_NULLABLE),
                TableDefinition.Column("Survived", SqlType.big_int(), NOT_NULLABLE),
                TableDefinition.Column("Pclass", SqlType.big_int(), NOT_NULLABLE),
                TableDefinition.Column("Name", SqlType.text(), NOT_NULLABLE),
                TableDefinition.Column("Sex", SqlType.text(), NOT_NULLABLE),
                TableDefinition.Column("Age", SqlType.double(), NULLABLE),
                TableDefinition.Column("SibSp", SqlType.big_int(), NOT_NULLABLE),
                TableDefinition.Column("Parch", SqlType.big_int(), NOT_NULLABLE),
                TableDefinition.Column("Ticket", SqlType.text(), NOT_NULLABLE),
                TableDefinition.Column("Fare", SqlType.double(), NULLABLE),
                TableDefinition.Column("Cabin", SqlType.text(), NULLABLE),
                TableDefinition.Column("Embarked", SqlType.text(), NULLABLE)
                ]
            )
            #Créer virtuellement une table basée sur la définition de table(le schéma par défaut est public)
            connection.catalog.create_table(table_def)
            #Exécutez la commande COPY comme PostgreSQL
            record_count = connection.execute_command(
                command=f'''
                COPY {table_def.table_name} from {escape_string_literal(src_path)} with (format csv, delimiter ',', header)
                '''
            )
            print(f"The number of rows in table {table_def.table_name} is {record_count}.")

Résultat d'exécution


The number of rows in table "train" is 891.

Après le traitement, si vous regardez data / train.hyper dans Tableau ... スクリーンショット 2020-02-09 14.43.30.png J'ai pu confirmer que le fichier hyper a été créé avec succès!

finalement

J'ai été impressionné par l'évolution du SDK Tableau jusqu'à présent. Si vous utilisez principalement Tableau Desktop ou Tableau Server, vous aurez rarement l'occasion d'utiliser des hyperfichiers, mais si pour une raison quelconque vous devez distribuer des rapports à l'aide de Tableau Reader, etc., ce sera très utile. Ça ira.

référence

https://help.tableau.com/current/api/hyper_api/en-us/docs/hyper_api_insert_csv.html

Recommended Posts

Comment insérer par lots un fichier CSV vers un hyperfichier Tableau avec la commande COPY de type PostgreSQL
Comment lire un fichier CSV avec Python 2/3
Comment convertir un fichier JSON en fichier CSV avec Python Pandas
[Python] Ecrire dans un fichier csv avec Python
Sortie vers un fichier csv avec Python
Comment faire une commande pour lire le fichier de paramètres avec pyramide
[Python] Comment convertir un fichier db en csv
Convertir de PDF en CSV avec pdfplumber
Comment utiliser la commande CUT (avec exemple)
Comment créer des exemples de données CSV avec hypothèse
[Python] Comment lire des fichiers Excel avec des pandas
Générez une instruction d'insertion à partir de CSV avec Python.
Comment créer un article à partir de la ligne de commande
Comment supprimer la chaîne de caractères spécifiée avec la commande sed! !! !!
J'ai essayé de toucher un fichier CSV avec Python
Backtrader Comment importer un indicateur depuis un autre fichier
Comment mesurer le temps de lecture d'un fichier mp3 avec python
Comment générer un CSV d'en-tête multiligne avec des pandas
Comment convertir des fichiers Json au format CSV ou au format EXCEL
Script Python qui crée un fichier JSON à partir d'un fichier CSV
[Python / Ruby] Comprendre le code Comment obtenir des données en ligne et les écrire au format CSV
Comment mettre un lien hypertexte vers "file: // hogehoge" avec sphinx-> pdf
Comment exécuter un fichier Python à une invite de commande Windows 10
[Linux] Copie des données de Linux vers Windows avec un script shell
Comment vérifier le comportement d'ORM avec un fichier avec django
Comment lancer AWS Batch à partir de l'application cliente Python
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
Jeu à la main Python (CSV est appliqué avec Pandas DataFrame, mais seulement la colonne complète Insérer de CSV à DB?)