【发布时间】:2020-11-29 12:44:35
【问题描述】:
我正在尝试将以下 teradata sql 转换为 hive sql,但我得到了空表。
TERADATA SQL:
SELECT
TRIM(CAST(BOOK_ID AS BIGINT)) || '_' ||TRIM(CAST(REF_ID AS BIGINT))
AS BOOK_REF,
CASE WHEN (PHOTO_COUNT > 0) AND (INDEX(PICTURE_URL , ';')>0) THEN
SUBSTRING(PICTURE_URL FROM 1 FOR POSITION(';' IN PICTURE_URL)-1)
ELSE PICTURE_URL
END AS MAIN_IMAGE
FROM GENERIC_BOOKS;
蜂巢:
SELECT
CASE WHEN (PHOTO_COUNT > 0) AND (instr(A.PICTURE_URL, ';') > 0) THEN
SUBSTRING(A.PICTURE_URL, 1, FIND_IN_SET(';', A.PICTURE_URL))-1
ELSE A.PICTURE_URL
END AS ITEM_MAIN_IMAGE
FROM GENERIC_BOOKS;
对于本示例,预期的 MAIN_IMAGE 应为:https://booking.com/00/s/OTAwWDE2A=/z/wKEAAOSwfURc~gng/$_57.JPG?set_id=8800005007
【问题讨论】:
-
请分享 generic_books ddl,样本 teradata 输入和 hive 输出是?
-
SUBSTRING(PICTURE_URL FROM 1 FOR POSITION(';' IN PICTURE_URL)-1)的输入输出 -
我已经更新了上述 teradata 的 hive 等效查询,如果您可以在问题中分享该查询的 teradata 输入和输出,我可以相应地更新答案。
-
你为什么使用
find_in_set而不是instring或locate?