【问题标题】:Delta tables in Databricks and into Power BIDatabricks 和 Power BI 中的增量表
【发布时间】:2021-10-15 22:29:15
【问题描述】:

我通过安装在 Databricks 中并创建一个表(“使用 delta”)连接到 Azure gen 2 数据湖中的一个 delta 表。然后我使用 Databricks 连接器在 Power BI 中连接到此。

首先,我不清楚 Databricks 中数据湖和 Spark 表之间的关系。 Spark表每次自己查询时都从数据湖(delta湖)中检索最新的快照是否正确?是不是也不能通过对 Spark 表的操作来影响数据湖的变化?

其次,减少 Spark 表中列的最佳方法是什么(最好是在将其读入 Power BI 之前)?我尝试使用指定的列子集创建 Spark 表,但出现无法更改架构错误。相反,我可以创建另一个从第一个 Spark 表中选择的 Spark 表,但这似乎效率很低,并且(我认为)需要根据 Power BI 报告的刷新计划频繁地重新创建。我不知道是否有可能有一个 Spark delta 表引用另一个 Spark Delta 表,以便前者在查询时也始终是最新的快照?

如您所知,我对此的理解是有限的(文档也是如此!)但非常感谢任何指针。

提前感谢您的阅读!

【问题讨论】:

    标签: apache-spark powerbi databricks azure-data-lake delta-lake


    【解决方案1】:

    Spark 中的表只是指定数据所在位置的元数据。因此,当您读取表时,Spark 只是在 Metastore 中查找数据存储位置、架构等信息,然后访问该数据。对 ADLS 所做的更改也将反映在表格中。也可以通过工具修改表,但这取决于处理数据的 Spark 集群可以使用哪些访问权限 - 您可以在 ADLS 级别或使用 table access control 设置权限。

    对于第二部分-您只需在原始表上create a view,该视图将仅选择有限的列集-不会复制数据并且原始表中的最新更新将始终可用于查询。比如:

    CREATE OR REPLACE VIEW myview
        AS SELECT col1, col2 FROM mytable
    

    附:如果您仅通过 PowerBI 或其他 BI 工具进行访问,则可以查看针对 BI 用例进行了高度优化的 Databricks SQL(当它在公共预览版中时)。

    【讨论】:

    • Alex,非常感谢您的清晰、非常有帮助和快速的响应!我唯一的后续行动是,如果您要在 Spark 表上运行 SQL 删除语句会发生什么?
    • 数据将被删除,但会在 Delta 历史记录中保留一段时间,以便您将其恢复。但通常,对于 BI 用户,建议具有只读访问权限
    • 好的,很好。删除 Spark 表不会影响数据湖表,对吧?
    • 删除使用“create table ... using”创建的表会将数据留在 ADLS 上。它就是所谓的“非托管表”。有时也称为“外部表”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多