我目前正在尝试使用Tableau Extract API从PostgreSQL数据库中的表中生成一些TDE。我能够编写一个代码来从单个表生成TDE,但我想为多个连接表执行此操作。更具体地说,如果我有两个内部由某个字段连接的表,我将如何为此生成TDE?
我可以看到,如果我使用少量表,我可以使用带有JOIN子句的SQL查询来创建一个巨大的表,并从该表生成TDE。
>> SELECT * FROM table_1 INNER JOIN table_2
INTO new_table_1
ON table_1.id_1 = table_2.id_2;
>> SELECT * FROM new_table_1 INNER JOIN TABLE_3
INTO new_table_2
ON new_table_1.id_1 = table_3.id_3
然后从new_table_2生成TDE。
但是,我有一些表有超过40个不同的字段,所以这可能会变得混乱。
对于当前版本的API,这是否可能?
答案 0 :(得分:2)
您可以根据需要从多个表或其他来源中读取数据。或者使用具有大量连接的复杂查询,或创建视图并从中读取。通常,当您有一个连接多个表的复杂查询时,创建视图会很有用。
数据提取API完全不知道如何或在何处获取数据 - 整个过程是允许您从没有预先构建的Tableau驱动程序的异常源中获取数据。
由于Tableau具有Postgres驱动程序并且可以直接从中读取,因此您根本不需要编写带有数据提取API的程序。您可以使用Tableau Desktop定义提取。如果需要安排提取的自动刷新,可以使用Tableau Server或其tabcmd命令。
答案 1 :(得分:1)
非常感谢您的回复。我知道我可以使用Tableau Desktop来定义我的提取。事实上,我之前做过很多次。我只是尝试使用API创建提取,因为我需要创建一些计算字段,这几乎不可能使用Tableau Desktop创建。
此时,我对在SQL查询中使用JOIN犹豫不决,因为生成的表看起来太复杂而无法理解(其中一些表也有相同的字段名称)。
当您说我可以从多个表或源中读取时,这是否意味着使用Tableau Extract API?此时,我无法在此API中找到容纳多个源的任何位置。例如,我知道当我在Tableau Desktop中使用多个表时,左侧有图标,告诉我提取是由多个表组成的。这似乎与API无关,这让我陷入困境。无论如何,再次感谢您的回复。
答案 2 :(得分:1)
回到主题,这是我几天前在我的python代码上试过的东西
try:
tdefile= tde.Extract("extract.tde")
except:
os.remove("extract.tde")
tdefile = tde.Extract("extract.tde")
tableDef = tde.TableDefinition()
# Read each column in table and set the column data types using tableDef.addColumn
# Some code goes here...
for eachTable in tableNames:
tableAdd = tdeFile.addTable(eachTable, tableDef)
# Use SQL query to retrieve bunch_of_rows from eachTable
for some_row in bunch_of_rows:
# Read each row in table, and set the values in each column position of each row
# Some code goes here...
tableAdd.insert(some_row)
some_row.close()
tdefile.close()
当我执行此代码时,我得到的错误是必须将eachTable称为“Extract”。
当然,这段代码有其缺陷,因为这段代码中没有任何地方可以说明每个表的连接方式。
所以我很少被抛弃,因为除非我使用JOIN生成一个包含所有内容的表,否则我似乎不能使用多个表。