【问题标题】:Azure Databricks table not refreshingAzure Databricks 表未刷新
【发布时间】:2018-11-01 18:26:56
【问题描述】:

我有 Azure 群集设置,可以从 Azure 数据湖中的文本文件创建一个表。然后我有另一个表,它是基于上述第一个表的 SQL 语句。我更新了 Data-Lake 中的文本文件并针对第一个表运行 Refresh Table,一切都很好,我从文本文件中看到了更改的信息。然后我对第二个表运行刷新表,当我查询该表时,它不反映文本文件中的更改。以下是我拥有的笔记本中每个单元格的详细信息。

这是创建指向文本文件的表格的单元格

%sql
Create Table If Not Exists Raw.ReferenceTables
Using TEXT
Location "/mnt/adls/Raw/SAP/sd13.txt"

这是创建指向上面 Raw.ReferenceTables 表的表的单元格

%sql
Create Table If Not Exists Raw.CostCenter
as
Select ltrim(rtrim(substring(value, 9, 6))) CostCenterId, 
  ltrim(rtrim(substring(value, 15, 30))) CostCenterDescription,
  ltrim(rtrim(SubString(value, 45, 1))) CostCenterCategory,
  ltrim(rtrim(SubString(value, 51, 5))) ProfitCenterID,
  ltrim(rtrim(SubString(value, 56, 15))) StdHierarchy,
  ltrim(rtrim(substring(value, 71, 4))) CompanyId
From Raw.ReferenceTables
Where substring(value,2 ,3) = '048'
  AND substring(value, 1 ,1) = 'D'
  AND substring(value, 5 ,4) <> 'SC-1'

所以现在当我第一次查询 Raw.CostCenter 时,一切看起来都不错。

%sql
Select * From Raw.CostCenter

然后我更新了 DataLake 中的 txt 文件并针对 Raw.ReferenceTables 和 Raw.CostCenter 表运行 Refresh Tables

%sql
Refresh Table Raw.ReferenceTables
%sql
Refresh Table Raw.CostCenter

当我查询 Raw.ReferenceTables 时,我可以看到更新的信息,但是当我查询 Raw.CostCenter 表时,我看不到任何更改。我尝试只使用定义 Raw.CostCenter 的查询并运行它,它也会拉回我期望的结果。

如果我删除 Raw.CostCenter 表然后再次创建它,它将显示正确的更新信息。

如果我遗漏了一些基本的东西,我提前道歉,因为这是我第一次让用户 Databricks 做任何事情。这似乎很简单,但我只是不明白我在这里缺少什么。谢谢。

我对 Raw.CostCenter 表进行了描述,如下面的其中一个 cmets 中所述,这就是结果

CostCenterId            string  null
CostCenterDescription   string  null
CostCenterCategory      string  null
ProfitCenterID          string  null
StdHierarchy            string  null
CompanyId               string  null

# Detailed Table Information        
Database            raw 
Table               costcenter  
Owner               root    
Created Time        Wed Oct 31 20:35:50 UTC 2018    
Last Access         Thu Jan 01 00:00:00 UTC 1970    
Created By          Spark 2.3.0 
Type                MANAGED 
Provider            parquet 
Table Properties    [transient_lastDdlTime=1541018150]  
Location            dbfs:/user/hive/warehouse/raw.db/costcenter 
Serde Library  org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe  
InputFormat    org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat    
OutputFormat     
 org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat 
Storage Properties  [serialization.format=1]               

但我看不出这对我了解如何更新表格有什么帮助。

【问题讨论】:

    标签: azure azure-data-lake databricks


    【解决方案1】:

    很难确定您的数据在 Databricks 中的实际位置

    创建了一个新的物理表,方法是使用 CREATE TABLE AS SELECT 创建一个新表并从现有表中复制数据。运行该语句后,Raw.ReferenceTables 和 Raw.CostCenter 之间不再有任何关系。

    Describe 是你的朋友。

    如果您不想要数据的单独副本,您可以创建一个view

    【讨论】:

    • 好的。我已经把描述的输出放在了,但我看不出这对我有什么帮助。无论如何,我可以有一个单独的表并做一些会导致表更新的事情。我想我可以创建一个视图,但我想这会占用大量资源,因为我在多个视图层中添加了越来越多的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2021-12-28
    • 1970-01-01
    • 2021-11-28
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多