본문 바로가기
Tableau 흡수내용

[Tableau(태블로)]Tableau Server로 Dataframe 데이터 업로드하기

by Mr.noobiest 2022. 5. 6.

Tabpy도 그렇고 pantab도 그렇고 Tableau와 Python은 웬만하면 호환되는 경우가 많다.

 

이를 사용하여 .py파일을 만들어 스케줄링을 걸어주면 자동으로 데이터 원본을 업데이트하는 기능도 가능하다

 

이번엔 Python 코드를 사용하여 .CSV 파일 또는 Dataframe 형식의 대용량(2Gb)이상 데이터를 Tableau Server에 .hyper파일로 업로드해볼것이다.

 

1) CSV -> Hyper -> Server Upload


import pandas as pd
import csv


PATH_TO_CSV = "CSV파일의 경로.csv"
CSV_DF = pd.read_csv(PATH_TO_CSV,na_filter=False)   #na_filter는 NA 혹은 NAN이라 적혀있는 문자열을 유지해준다.
TS_CONFIG = {
'my_enb' : {
   'server' : 'Tableau Server 주소/',
   'api_version' : 'Tableau Server 버전',
   'username' : 'Tableau Server 로그인 ID',
   'password' : 'Tableau Server 로그인 PW',
   'site_name' : '',
   'site_url':'',
  }
}


#CSV_DF.columns() #csv -> hyper로 변환할때 컬럼 순서와 포맷(형)이 그대로 반영되므로 수정하도록하자
#CSV_DF.info()
#수정이 완료된 CSV파일을 덮어씌우자
#CSV_DF.to_csv(PATH_TO_CSV, index=False)


### CSV 파일을 Hyper로 변환하기
from tableauhyperapi import HyperProcess, Connection, TableDefinition, SqlType,Telemetry,Inserter,CreateMode,TableName
from tableauhyperapi import escape_string_literal


PATH_TO_HYPER = 'csv->Hyper로 변환한후 hyper파일을 저장할 위치 .hyper'


with HyperProcess(Telemetry.SEND_USAGE_DATA_TO_TABLEAU,'myapp') as hyper:
    with Connection(endpoint=hyper.endpoint,
                         create_mode=CreateMode.CREATED_AND_REPLACE,
                         database=PATH_TO_HYPER) as connection:
          connection.catalog.create_schema('Extract')
          schema = TableDefinition(tableau_name=TableName('본인이 원하는 Table명'),


#아래의 컬럼명들은 csv_df.columns()명령어를 확인하면된다.
                 columns=[
                       TableDefinition.Column('컬럼명1',SqlType.int()),
                       TableDefinition.Column('컬럼명2',SqlType.date()),
                       TableDefinition.Column('컬럼명3',SqlType.text()),
                       TableDefinition.Column('컬럼명4',SqlType.int()),
                       TableDefinition.Column('컬럼명5',SqlType.text()),
    ])
    connection.catalog.create_table(schema)
    insert_csv_data = connection.execute_command(
       command=f"COPY {schema.table_name} FROM {escape_string_literal(PATH_TO_CSV)} WITH "
                      f"(format csv, delimiter ',', header )"
       )



1-2) 완성된 hyper 파일을 서버에 업로드하기
#먼저 프로젝트 ID를 구해야한다 
tableau_auth= TSC.TableauAuth('Tableau Server에 로그인 할때 ID',
                                         'Tableau Server에 로그인 할때 PW', site_id='')
server =TSC.Server('Tableau Server 주소',use_server_version=True)
server.auth.sign_in(tableau_auth)


projectName= '프로젝트 이름'
print([project.name,project.id) for project in TSC.Pager(server.projects) if project.name.startwith(projectName)])


#이 부분을 먼저 실행하면 Project 명과 id가 출력된다.
###################################################################################




try:
    conn = TableauServerConnection(config_json=TS_CONFIG, env='my_env')
    conn.sign_in()
    response = conn.publish_data_source(
           datasource_file_path =PATH_TO_HYPER,
           datasource_name='Tableau Server에 저장될때의 데이터 원본명',
           project_id ='1-2) 에서 구한 프로젝트 ID')
    conn.sign_out()
except:
   pass

 

이렇게 하면 csv 파일을 hyper 파일로 변환할수도 있고, 만들어진 hyper 파일을 서버에 게시할수도 있다.

 

728x90
반응형