У меня есть установка кластера 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
Затем я обновил txt-файл в DataLake и запустил таблицы обновления для таблиц Raw.ReferenceTables и Raw.CostCenter
%sql
Refresh Table Raw.ReferenceTables
%sql
Refresh Table Raw.CostCenter
Когда я запрашиваю Raw.ReferenceTables, я вижу обновленную информацию, но когда я запрашиваю таблицу Raw.CostCenter, я не вижу никаких изменений. Я попытался просто взять запрос, который определяет Raw.CostCenter, и запустить его, и он также возвращает ожидаемые результаты.
Если я удаляю таблицу Raw.CostCenter, а затем снова создаю ее, она будет отображать правильную обновленную информацию.
Я заранее прошу прощения, если мне не хватает чего-то базового, потому что это первый раз, когда у меня есть пользовательские блоки данных для чего-либо. Это кажется очень прямым, но я просто не понимаю, чего мне здесь не хватает. Спасибо.
Я запустил описание для таблицы 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]
Но из этого не видно, какую помощь это дает мне, чтобы узнать, как обновить таблицу.