sql - 在以下 CASE WHEN 语句中使用 SELECT AS 别名 - Spark SQL

标签 sql apache-spark-sql databricks

看来我无法执行以下操作,因为它无法识别 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/

相关文章:

apache-spark - Py4JJavaError : An error occurred while calling o389..csv

scala - 在 Apache Spark 中将 Dataframe 的列值提取为列表

apache-spark - Spark 结构流和批处理是否相同?

apache-spark - Databricks:检测到不兼容的格式(临时 View )

azure - Pyspark - 是否可以将 pyspark 数据帧写入 Log Analytics 工作区中的自定义日志表

python - PySpark 根据排名创建新列

mysql - 数据库中的序列化 SQL

sql - 更新字段几何多边形 PostGIS PostgreSQL

php - 如何连接两个或多个表,每个表具有相同的列名

sql - 在带有 CASE 语句的 UPDATE 上使用 LAG()