无TDS/TDSX文件时,如何通过REST API上传CSV/XLS至Tableau Server?
解决方案:直接上传CSV/XLS到Tableau Server数据源的问题
Tableau Server的publish_data_source接口仅接受TDS(Tableau数据源定义文件)或TDSX(打包了数据源和数据文件的压缩包)格式,直接传CSV/XLS会触发InvalidFileTypeException,以下是几种实用的解决思路:
方案一:手动生成基础TDS,自动化打包为TDSX(推荐)
这是最省心的方式,只需一次手动配置,后续重复使用:
- 生成基础TDS文件
- 打开Tableau Desktop,连接你的CSV/XLS文件,调整字段类型、别名、计算字段等必要配置。
- 右键左侧面板的数据源,选择「导出数据源」,保存为
.tds文件。
- 每日自动化打包TDSX
TDSX本质是包含TDS和数据文件的ZIP包,每次更新数据时,将新的CSV/XLS和TDS打包成ZIP,再改后缀为.tdsx。用Python实现的示例代码:import zipfile import os def build_tdsx(tds_file, data_file, output_path): with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zip_ref: # 将TDS和数据文件添加到压缩包根目录 zip_ref.write(tds_file, os.path.basename(tds_file)) zip_ref.write(data_file, os.path.basename(data_file)) # 调用示例:生成daily_data.tdsx build_tdsx('my_base_datasource.tds', 'new_daily_data.csv', 'daily_data.tdsx') - 发布TDSX覆盖旧数据源
用tableau_api_lib发布时指定overwrite=True:from tableau_api_lib import TableauServerConnection # 初始化连接(假设已配置好服务器认证信息) conn = TableauServerConnection(your_config_dict) conn.sign_in() # 发布并覆盖现有数据源 publish_response = conn.publish_data_source( datasource_file_path='daily_data.tdsx', datasource_name='每日更新数据源', project_id='你的项目ID', overwrite=True ) conn.sign_out()
方案二:通过API直接创建数据源(无需预生成TDS)
如果不想依赖Tableau Desktop,可以直接通过API上传数据文件并创建数据源:
- 上传CSV/XLS到Tableau Server文件存储
# 上传数据文件,获取文件ID file_upload_response = conn.add_file( file_path='new_daily_data.csv', project_id='你的项目ID' ) file_id = file_upload_response.json()['file']['id'] - 创建数据源并关联文件
需手动指定连接类型(CSV用textscan,Excel用excel)和字段配置:
注意:这种方式需要手动维护字段映射和格式配置,适合结构简单且固定的数据源。create_response = conn.create_data_source( datasource_name='每日更新数据源', project_id='你的项目ID', connection_type='textscan', connection_attributes={ 'file': file_id, 'textscan.settings': '{"delimiter":",","header":true}' # 根据你的CSV配置调整 }, overwrite=True )
方案三:结合Tableau Prep自动化生成TDSX(适合复杂数据转换)
如果你的CSV/XLS需要清洗、合并等转换操作:
- 用Tableau Prep Builder创建数据处理流程,输出为TDSX文件。
- 配置Tableau Prep Conductor每日定时运行流程,生成最新的TDSX。
- 用tableau_api_lib发布生成的TDSX覆盖旧数据源。
关键注意事项
- 确保每日更新的CSV/XLS和TDS中定义的字段结构完全一致(字段名、数量、数据类型),否则会发布失败。
- 打包TDSX时,无需修改TDS中的文件路径,压缩后Tableau会自动识别相对路径。
内容的提问来源于stack exchange,提问作者Shahrukh Khalidi
相关产品推荐
相关产品推荐

