Postgresql Tableau在数据库中使用多个表提取API

Postgresql Tableau在数据库中使用多个表提取API,postgresql,tableau-api,Postgresql,Tableau Api,我目前正在试验Tableau Extract API,以便从PostgreSQL数据库中的表生成一些TDE。我能够编写一个代码从单个表生成TDE,但我希望对多个联接表执行此操作。更具体地说,如果我有两个由某个字段内部连接的表,我将如何为此生成TDE 我可以看到,如果我使用的是少量的表,我可以使用带有JOIN子句的SQL查询来创建一个巨大的表,并从该表生成TDE >> SELECT * FROM table_1 INNER JOIN table_2 INTO new_table

我目前正在试验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
然后从新的_表_2中生成TDE

然而,我有一些表有超过40个不同的字段,所以这可能会变得混乱


在当前版本的API中,这甚至是可能的吗?

您可以从任意多的表或其他来源读取数据。或者使用具有大量联接的复杂查询,或者创建一个视图并从中读取。通常,当您有一个连接多个表的复杂查询时,创建视图会很有帮助

data extract API完全不知道如何或从何处获取数据来为其提供数据——关键是允许您从不寻常的源中获取数据,这些源没有为Tableau预先构建的驱动程序


由于Tableau有一个Postgres驱动程序,可以直接从中读取,所以根本不需要使用数据提取API编写程序。您可以使用Tableau Desktop定义提取。如果您需要计划自动刷新摘录,可以使用Tableau Server或其tabcmd命令。

非常感谢您的回复。我知道我可以使用Tableau Desktop定义我的摘录。事实上,我以前做过很多次。我只是尝试使用API创建摘录,因为我需要创建一些计算字段,这几乎不可能使用Tableau桌面创建

此时,我不太愿意在SQL查询中使用联接,因为生成的表看起来太复杂,难以理解(其中一些表也有相同的字段名)


当您说我可以从多个表或源读取数据时,这是否意味着使用Tableau Extract API?在这一点上,我在这个API中找不到任何可以容纳多个源的地方。例如,我知道当我在Tableau桌面中使用多个表时,左手边有一些图标告诉我提取是由多个表组成的。API似乎没有出现这种情况,这让我陷入了困境。无论如何,再次感谢您的回复。

回到主题,这是我几天前在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()
当我执行这段代码时,我得到一个错误,即每个表都必须被称为“Extract”

当然,这段代码也有它的缺陷,因为在这段代码中没有任何地方可以告诉每个表是如何连接的


所以我对这里有点不感兴趣,因为我似乎不能使用多个表,除非我使用连接生成一个包含所有内容的表。

您似乎误解了Tableau数据源。从Tableau的角度来看,数据源始终是一个“表”。它有一组固定的列和任意的行。数据源可以通过不同的方式获取其输入数据:从单个数据库表或视图,或通过连接多个数据库表,或通过自定义sql。但是数据源输出是一个表。为了方便起见,当您使用Tableau中的联接时,用户界面会按字段名显示原始表名,但数据源仍然只会生成一个表。提取只是数据源的快照。我上面的评论有点不对劲。数据连接仍然向Tableau提供一个类似表的结构,但提取可以包含多个表。