Tableau Extract API,在数据库中包含多个表

时间:2013-07-16 18:13:35

标签: postgresql tableau

我目前正在尝试使用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,这是否可能?

3 个答案:

答案 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生成一个包含所有内容的表,否则我似乎不能使用多个表。