看来我无法执行以下操作,因为它无法识别 CASE 逻辑中有值(value)的 StageCodeTableB。但这很奇怪,因为我能够在不同的练习中做到一次。有没有办法访问CASE逻辑中的StageCodeTableB变量?
您可以只在 CASE 逻辑中引用 tableB.stageCode,但是如果您在 SELECT 阶段进行了一些转换,则需要在每个 WHEN 语句中一次又一次地重写这些...
%sql
DROP TABLE IF EXISTS database.tableA;
CREATE TABLE database.tableA PARQUET AS
SELECT
CAST(tableB.stageCode AS STRING) AS StageCodeTableB,
CASE
WHEN StageCodeTableB = '33' THEN 1
ELSE NULL
END AS StageCodeTableBSCORE
FROM database.tableB AS tableB
最佳答案
SparkSQL 即使与 CTAS (CREATE TABLE AS) 一起也支持通用表表达式 (CTE),因此您可以将它们一起使用。一个简单的例子;
%sql
DROP TABLE IF EXISTS sparkDb.tableA;
CREATE TABLE IF NOT EXISTS sparkDb.tableA USING PARQUET
AS
WITH cte AS (
SELECT
stageCode,
CAST(tableB.stageCode AS STRING) AS StageCodeTableB
FROM sparkDb.tableB AS tableB
)
SELECT *,
CASE
WHEN StageCodeTableB = '33' THEN 1
ELSE NULL
END AS StageCodeTableBSCORE
FROM cte;
SELECT * FROM tableA;
关于sql - 在以下 CASE WHEN 语句中使用 SELECT AS 别名 - Spark SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68473433/