【问题标题】:Tableau Extract API with multiple tables in a databaseTableau Extract API 与数据库中的多个表
【发布时间】:2013-07-16 18:13:35
【问题描述】:

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

【问题讨论】:

    标签: postgresql tableau-api


    【解决方案1】:

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

    数据提取 API 完全不知道您如何或从何处获取数据以提供给它 - 重点是允许您从没有为 Tableau 预构建驱动程序的不寻常来源获取数据。

    由于 Tableau 有 Postgres 驱动程序并且可以直接从中读取,因此您根本不需要使用数据提取 API 编写程序。您可以使用 Tableau Desktop 定义数据提取。如果您需要安排数据提取的自动刷新,可以使用 Tableau Server 或其 tabcmd 命令。

    【讨论】:

      【解决方案2】:

      非常感谢您的回复。我知道我可以使用 Tableau Desktop 来定义我的数据提取。事实上,我之前已经做过很多次了。我只是尝试使用 API 创建数据提取,因为我需要创建一些计算字段,而这几乎不可能使用 Tableau Desktop 创建。

      此时,我对在 SQL 查询中使用 JOIN 犹豫不决,因为生成的表看起来太复杂而难以理解(其中一些表也具有相同的字段名称)。

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

      【讨论】:

        【解决方案3】:

        回到正题,这是我前几天在我的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()
        

        当我执行这段代码时,我得到每个表必须被称为“提取”的错误。

        当然,这段代码有其缺陷,因为这段代码中没有说明每个表是如何连接的。

        所以我在这里有点不高兴,因为我似乎不能使用多个表,除非我使用 JOIN 来生成一个包含所有内容的表。

        【讨论】:

        • 您似乎误解了 Tableau 数据源。从 Tableau 的角度来看,数据源始终是一个“表”。它有一组固定的列和任意行。数据源可以通过不同的方式获取其输入数据:从单个数据库表或视图,或通过连接多个数据库表,或通过自定义sql。但是数据源输出是一个表。为方便起见,当您使用 Tableau 中的联接时,用户界面会按字段名称显示原始表名称,但数据源仍会产生一个表。数据提取只是数据源的快照。
        • 我上面的评论有点不对劲。数据连接仍会向 Tableau 提供一个类似表的结构,但一个数据提取可以包含多个表。
        猜你喜欢
        • 1970-01-01
        • 2016-07-06
        • 1970-01-01
        • 2016-02-18
        • 1970-01-01
        • 2020-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多