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
Le _API complet peut être installé avec pip install tableau hyperapi
. _
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
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 ...
J'ai pu confirmer que le fichier hyper a été créé avec succès!
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.
https://help.tableau.com/current/api/hyper_api/en-us/docs/hyper_api_insert_csv.html
Recommended Posts