有没有办法访问增量表旧列名?

Is there a way to access a delta table old column name?

提问人:Roland R. 提问时间:9/7/2023 最后编辑:Alex OttRoland R. 更新时间:9/9/2023 访问量:39

问:

我有一个表格,上面有客户 ID、creditcard_number和creditcard_type(美国运通卡、万事达卡等) 我正在努力找到一种方法:

  1. 使用增量湖函数将列名 creditcard_type 修改为 type 和 creditcard_number to number 的列名
  2. 将列的旧名称记录在某处,以便我可以访问它并使用它来修改 .ttl 文件(用于虚拟知识图谱映射),我在其中搜索旧名称并将其替换为新列名称。

我尝试使用更改数据馈送(但它只跟踪行级别的更改) 我尝试使用列映射(但列映射也不会修改数据文件)。如果它也不修改文件,我就无法在 Dremio 中看到它们(我将其用作联合体,将数据进一步加载到 Ontopic - 虚拟知识图谱工具)。

如何更改列的名称?然后访问它的旧名称。一切都必须由达美航空完成。Delta 事件能够做到这一点吗?还是我错过了什么?

apache-spark pyspark delta-lake dremio data-lakehouse

评论


答:

1赞 Alex Ott 9/9/2023 #1

是的,您可以从 Delta Lake 1.2.0 开始重命名列,至少在 Apache Spark 中是这样(不确定 Dremio) - 您需要按名称启用列映射(我的表称为):test

ALTER TABLE test SET TBLPROPERTIES (
   'delta.columnMapping.mode' = 'name',
   'delta.minReaderVersion' = '2',
   'delta.minWriterVersion' = '5')

然后重命名列:

ALTER TABLE test rename column creditcard_type to type;
ALTER TABLE test rename column creditcard_number to number

您可以使用如下方法从 Delta 表历史记录中提取旧名称和新名称(提取历史记录,仅保留操作并从列中选择旧名称和新名称):RENAME COLUMNoperationParameters

# fetch history for the table
tdf = spark.sql("describe history test") \
  .filter("operation='RENAME COLUMN'") \
  .selectExpr("operationParameters['oldColumnPath'] as old_name", 
              "operationParameters['newColumnPath'] as new_name")
# convert dataframe into a dict old_name -> new_name
names_mapping = dict([[r[0], r[1]] for r in tdf.collect()])

会给你:

>>> names_mapping
{'creditcard_number': 'number', 'creditcard_type': 'type'}