Azure Databricks表未刷新

时间:2018-11-01 18:26:57

标签: azure azure-data-lake databricks

我有Azure群集安装程序,该安装程序从Azure Data Lake中的文本文件创建表。然后,我有了另一个表,该表是基于上述第一个表的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表进行了描述,这就是结果

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]               

但是我从中看不到这对我有什么帮助,以找出如何更新表格。

1 个答案:

答案 0 :(得分:0)

弄清楚您的数据在Databricks中实际 的位置很棘手。

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

Describe是您的朋友在这里。

如果您不想单独复制数据,则可以创建view