[PYTHON] Batch-Einfügung von einer CSV-Datei in eine Tableau-Hyperdatei mit dem PostgreSQL-ähnlichen Befehl COPY

Aus irgendeinem Grund fand ich beim Betrachten der Tableau SDK-API-Referenz die folgende Beschreibung. Ich war überrascht.

Insert Data Directly from CSV Files

Alles, ** Mit dem PostgreSQL-ähnlichen Befehl COPY können Sie schnell Datensätze in eine Hyperdatei einfügen, die das einzigartige Datenformat von Tableau darstellt **.

Vor einigen Jahren habe ich einen Prozess zum Erstellen einer tde-Datei aus einer CSV-Datei implementiert, um Tableau Reader regelmäßig zu verteilen. Aufgrund der SDK-Spezifikationen handelt es sich jedoch um eine Einfügung für jeden Datensatz, sodass eine große Datenmenge verarbeitet wird Ich habe den Eindruck, dass es lange gedauert hat. Wenn Sie jedoch direkt mit dem Befehl COPY einfügen können, können Sie anscheinend auch mit einer großen Datenmenge schnell eine eigene Tableau-Datei erstellen (in diesem Fall hyper).

Dieses Mal werde ich die Trainingsdaten (CSV-Datei) von Kaggles Titanic-Datensatz mit dem Befehl COPY in die Hyper-Datei einfügen.

Klicken Sie hier für den Code https://github.com/yolo-kiyoshi/csv2hyper

Annahme

Die komplette _API kann mit pip install tableau hyperapi installiert werden. _

Verzeichnisaufbau

Es wird im folgenden Verzeichnis ausgeführt. Die .hyper Datei wird unter data / erstellt.

Verzeichnisaufbau


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

Implementierungscode

Definieren Sie zunächst die E / A-Datei.

#Fügen Sie den CSV-Quelldateipfad ein
src_path = '../data/train.csv'
#Hyper-Dateipfad, den Sie erstellen möchten
dist_path = '../data/train.hyper'

Verwenden Sie dann den Befehl COPY, um von CSV zu hyper einzufügen. Es ist eine grobe Erklärung, aber es ist wie "(1) Erstellen einer Sitzung zum Verarbeiten von Hyperdateien", "(2) Erstellen einer virtuellen PostgreSQL-ähnlichen Tabelle", "(3) Einfügen auf einmal aus einer CSV-Datei" und "(4) Ausspucken der gesamten Tabelle in eine Hyperdatei".

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

#Erstellen Sie eine Sitzung für die Arbeit mit Hyper-Dateien
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:
            #Tabelle definieren
            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)
                ]
            )
            #Erstellen Sie praktisch eine Tabelle basierend auf der Tabellendefinition(Das Standardschema ist öffentlich)
            connection.catalog.create_table(table_def)
            #Führen Sie den Befehl COPY wie PostgreSQL aus
            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}.")

Ausführungsergebnis


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

Wenn Sie sich nach der Verarbeitung "data / train.hyper" in Tableau ansehen ... スクリーンショット 2020-02-09 14.43.30.png Ich konnte bestätigen, dass die Hyperdatei erfolgreich erstellt wurde!

Schließlich

Ich war beeindruckt, dass sich das Tableau SDK bisher weiterentwickelt hat. Wenn Sie hauptsächlich Tableau Desktop oder Tableau Server verwenden, haben Sie selten die Möglichkeit, Hyperdateien zu verwenden. Wenn Sie jedoch aus irgendeinem Grund Berichte mit Tableau Reader usw. verteilen müssen, ist dies sehr nützlich. Wird besorgt.

Referenz

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

Recommended Posts

Batch-Einfügung von einer CSV-Datei in eine Tableau-Hyperdatei mit dem PostgreSQL-ähnlichen Befehl COPY
Lesen einer CSV-Datei mit Python 2/3
So konvertieren Sie eine JSON-Datei mit Python Pandas in eine CSV-Datei
[Python] Mit Python in eine CSV-Datei schreiben
Ausgabe in eine CSV-Datei mit Python
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
[Python] So konvertieren Sie eine Datenbankdatei in CSV
Konvertieren Sie mit pdfplumber von PDF in CSV
Verwendung des CUT-Befehls (mit Beispiel)
Erstellen von CSV-Beispieldaten mit Hypothese
[Python] Wie man Excel-Dateien mit Pandas liest
Generieren Sie mit Python eine Einfügeanweisung aus CSV.
So erstellen Sie einen Artikel über die Befehlszeile
So löschen Sie die angegebene Zeichenfolge mit dem Befehl sed! !! !!
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Backtrader So importieren Sie einen Indikator aus einer anderen Datei
So messen Sie die Wiedergabezeit von MP3-Dateien mit Python
So geben Sie die CSV eines mehrzeiligen Headers mit Pandas aus
So konvertieren Sie Json-Dateien in das CSV- oder EXCEL-Format
Python-Skript, das eine JSON-Datei aus einer CSV-Datei erstellt
[Python / Ruby] Mit Code verstehen Wie man Daten aus dem Internet abruft und in CSV schreibt
So setzen Sie einen Hyperlink zu "file: // hogehoge" mit sphinx-> pdf
So führen Sie eine Python-Datei an einer Windows 10-Eingabeaufforderung aus
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
So überprüfen Sie das Verhalten von ORM mit einer Datei mit django
So starten Sie AWS Batch über die Python-Client-App
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
Lesen einer Excel-Datei (.xlsx) mit Pandas [Python]
Python-Handspiel (CSV wird mit Pandas DataFrame angewendet, aber nur vollständige Spalte Von CSV in DB einfügen?)