(
ResponseRgBasketId STRING,
RawStandardisedLoadDateTime TIMESTAMP,
InfoMartLoadDateTime TIMESTAMP,
Operaame STRING,
RequestTimestamp TIMESTAMP,
RequestSiteId STRING,
RequestSalePointId STRING,
RequestdTypeId STRING,
RequeetValue DECIMAL(10,2),
ResponsegTimestamp TIMESTAMP,
RequessageId STRING,
RequestBasketId STRING,
ResponsesageId STRING,
RequestTransmitAttempt INT,
ResponseCode STRING,
RequestasketItems INT,
ResponseFinancialTimestamp TIMESTAMP,
RequeketJsonString STRING,
LoyaltyId STRING
)
USING DELTA
PARTITIONED BY (RequestTimestamp)
TBLPROPERTIES
(
delta.deletedFileRetentionDuration = "interval 1 seconds",
delta.autoOptimize.optimizeWrite = true
)
它已被 RequestTimestamp
(2020-12-12t07:39:35.000+0000),格式如下。我能把格式改成不同的格式吗 2020-12-34
在分区中?
1条答案
按热度按时间zf9nrax11#
简而言之:在partitioned by中不可能有regexp或其他转换。唯一的解决方案是在加载期间/之前应用substr(timestamp,1,10)。另请参见以下答案:https://stackoverflow.com/a/64171676/2700344
长话短说:
分区方式中不可能有regexp。表ddl中不允许有函数,只能指定类型。列规范中的类型用作约束,同时可能导致隐式类型转换。例如,如果您正在将字符串加载到日期中,如果可能的话,它将被隐式地强制转换,如果不可能强制转换,它将被加载到空的默认分区中。另外,如果您正在加载bigint,它将被自动截断为int,因此您将看到损坏的数据和重复的数据。
相同的隐式强制转换是否适用于partitioned by?让我们看看:
结果(我们希望时间戳被截断到日期…):
不,不行。使用varchar(10)列和类似您的字符串进行了相同的测试。见简短答案。