我想创建一个外部Impala表,每次数据集更新时,我都会简单地覆盖镶木地板。
我希望能够指定数据类型以及它们是否可以为null,但是这并不允许我这样做,因为当我执行某些操作时,它说镶木地板文件中存在不兼容的类型: ...列的Parquet模式不兼容...列类型:DECIMAL(18,0),Parquet模式:可选int64 Application_Surrogate_Key
假设我的实木复合地板文件中有APPLICATION_NAME,APPLICATION_ID,APPLICATION_DESCRIPTION;我想强加新的列名,并将数据类型强制为SQL样式的。如果我不参加实木复合地板,则可以使用SQL样式的模板创建它,例如
CREATE TABLE Application_Dimension (
APPLICATION_SK DECIMAL(18,0),
APPLICATION_NM VARCHAR(100),
DESCRIPTION_TXT VARCHAR(500));
效果很好,但是我不能通过添加
来做到这一点STORED AS PARQUET
LOCATION '/my/hdfs/implementation/application.parquet/';
我也不能覆盖名称。
在Impala中甚至可以做到这一点吗?
我看到有一种从select语句创建表的方法,基本上可以从现有表中选择所有内容,然后逐字段将其转换为所需的数据类型,但是我需要定期覆盖镶木地板以进行“更新”它,所以我认为这行不通...还有其他方法或方法可以实现此目的吗?
如果我只为镶木地板指定Spark数据类型和列上的名称,就没有办法将其强制为SQL类型,例如VARCHAR(50)而不是StringType?