从Azure Synapse Serverless SQL池中的CTE创建外部表

hgtggwj0  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(147)

在Azure Synapse无服务器SQL池中,我有一个CTE链。我想将结果存储在Azure Data Lake Storage中的外部表中。我的查询看起来像这样:

WITH CTE1 AS (
  <query logic>
), CTE2 AS (
  <query logic>
), CTE3 AS (
  <query logic>
)
SELECT * FROM CTE3

我尝试了以下操作:

WITH CTE1 AS (
  <query logic>
), CTE2 AS (
  <query logic>
), CTE3 AS (
  <query logic>
)
CREATE EXTERNAL TABLE [tmp].[Table] WITH (
    LOCATION = 'TEMP/',
    DATA_SOURCE = [data_lake_external_data_source],
    FILE_FORMAT = [parquet_external_file_format]
) AS
SELECT * FROM CTE3

这导致了这个错误:'* 关键字' CREATE'附近的语法不正确。*'
此外,我尝试创建一个空的外部表,并在CTE之后使用SELECT语句将数据插入其中,但看起来您无法将数据插入外部表。
存储CTE输出的正确方法是什么?它可以是临时表、外部表等。

swvgeqrz

swvgeqrz1#

由于CTE(公共表表达式),您面临的错误是一个只在查询期间存在的一次性结果集。我们不能在select下使用create语句。

若要在Azure Synapse Serverless SQL池中从CTE创建外部表,请执行以下代码:

CREATE  EXTERNAL  TABLE [dbo].[Table1] WITH (
LOCATION = 'File path',
DATA_SOURCE = Data_source_name,
FILE_FORMAT = File_Formaat
) AS
WITH CTE1 AS (
  <query logic>
), CTE2 AS (
  <query logic>
), CTE3 AS (
  <query logic>
)
SELECT * FROM CTE3

我的执行和输出:

相关问题