我正在生成我的usql脚本,动态地读取表模式。我在data lake store上有现有的tsv文件,我需要将新数据附加到那些现有的tsv文件中。 但是当我生成usql脚本时,表模式可能会发生变化,表可能会添加额外的列。
据我所知,我们需要在usc脚本中使用与tsv文件中相同数量的列。 是否可以使这些新添加的列具有一些默认值? 例如。
@Result = EXTRACT id string,
firstname string,
lastname string,
department string = "",
emp_id int = 0
FROM @inputfile
USING Extractors.Tsv();
如您所见,department和emp_id列是新添加的,我想将它们插入带有一些默认值的输出文件中。 如果tsv中已存在列,则选取列值,否则为它们插入一些默认值。
感谢。
答案 0 :(得分:1)
您当前无法将默认列指定为提取语句架构的一部分。目前推荐的模式是:
提取TSV版本的右列(确保将它们组织在一起,以便您轻松了解哪些列存在),然后使用UNION ALL BY NAME
合并行集。这会将null / default值列添加到缺少列的行集。
编写一个自定义提取器,以SqlMap作为参数,用指定的默认值填充缺少的列。