你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用无服务器 SQL 池

Synapse 无服务器 SQL 池是一个无服务器查询服务,可用于针对 Azure 存储中放置的文件运行 SQL 查询。 本快速入门介绍如何使用无服务器 SQL 池查询各种类型的文件。 OPENROWSET 中列出了支持的格式。

本快速入门展示如何查询:CSV、Apache Parquet 和 JSON 文件。

先决条件

选择用于发出查询的 SQL 客户端:

本快速入门的参数:

参数 说明
无服务器 SQL 池服务终结点地址 用作服务器名称
无服务器 SQL 池服务终结点区域 用于确定要在示例中使用的存储
用于访问终结点的用户名和密码 用于访问终结点
用于创建视图的数据库 在示例中从其着手的数据库

首次设置

在使用示例之前,请执行以下操作:

  • 为视图创建数据库(若要使用视图)
  • 创建供无服务器 SQL 池用来访问存储中的文件的凭据

创建数据库

创建自己的用于演示目的的数据库。 你将使用此数据库来创建视图,并将此数据库用于本文中的示例查询。

备注

数据库仅用于视图元数据,而不用于实际数据。 请记下数据库名称,以便稍后在本快速入门中使用。

使用以下查询(请将 mydbname 更改为所选名称):

CREATE DATABASE mydbname

创建数据源

若要使用无服务器 SQL 池运行查询,请创建供无服务器 SQL 池用来访问存储中的文件的数据源。 执行以下代码片段,以创建此部分的示例中使用的数据源:

-- create master key that will protect the credentials:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = <enter very strong password here>

-- create credentials for containers in our demo storage account
CREATE DATABASE SCOPED CREDENTIAL sqlondemand
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = 'sv=2018-03-28&ss=bf&srt=sco&sp=rl&st=2019-10-14T12%3A10%3A25Z&se=2061-12-31T12%3A10%3A00Z&sig=KlSU2ullCscyTS0An0nozEpo4tO5JAgGBvw%2FJX2lguw%3D'
GO
CREATE EXTERNAL DATA SOURCE SqlOnDemandDemo WITH (
    LOCATION = 'https://sqlondemandstorage.blob.core.windows.net',
    CREDENTIAL = sqlondemand
);

查询 CSV 文件

下图是要查询的文件的预览:

First 10 rows of the CSV file without header, Windows style new line.

以下查询展示了如何读取不包含标题行、包含 Windows 样式换行符和逗号分隔列的 CSV 文件:

SELECT TOP 10 *
FROM OPENROWSET
  (
      BULK 'csv/population/*.csv',
      DATA_SOURCE = 'SqlOnDemandDemo',
      FORMAT = 'CSV', PARSER_VERSION = '2.0'
  )
WITH
  (
      country_code VARCHAR (5)
    , country_name VARCHAR (100)
    , year smallint
    , population bigint
  ) AS r
WHERE
  country_name = 'Luxembourg' AND year = 2017

可以在查询编译时指定架构。 如需更多示例,请参阅如何查询 CSV 文件

查询 Parquet 文件

以下示例演示用于查询 Parquet 文件的自动架构推理功能。 该示例在不指定架构的情况下返回 2017 年 9 月的行数。

注意

读取 Parquet 文件时,不一定要在 OPENROWSET WITH 子句中指定列。 在这种情况下,无服务器 SQL 池会利用 Parquet 文件中的元数据,并按名称绑定列。

SELECT COUNT_BIG(*)
FROM OPENROWSET
  (
      BULK 'parquet/taxi/year=2017/month=9/*.parquet',
      DATA_SOURCE = 'SqlOnDemandDemo',
      FORMAT='PARQUET'
  ) AS nyc

详细了解如何查询 Parquet 文件

查询 JSON 文件

JSON 示例文件

文件存储在 json 容器的文件夹 books 中,包含采用以下结构的单个书籍条目:

{  
   "_id":"ahokw88",
   "type":"Book",
   "title":"The AWK Programming Language",
   "year":"1988",
   "publisher":"Addison-Wesley",
   "authors":[  
      "Alfred V. Aho",
      "Brian W. Kernighan",
      "Peter J. Weinberger"
   ],
   "source":"DBLP"
}

查询 JSON 文件

以下查询展示了如何使用 JSON_VALUE 在标题为“Probabilistic and Statistical Methods in Cryptology, An Introduction by Selected articles”的书籍中检索标量值(标题、出版商):

SELECT
    JSON_VALUE(jsonContent, '$.title') AS title
  , JSON_VALUE(jsonContent, '$.publisher') as publisher
  , jsonContent
FROM OPENROWSET
  (
      BULK 'json/books/*.json',
      DATA_SOURCE = 'SqlOnDemandDemo'
    , FORMAT='CSV'
    , FIELDTERMINATOR ='0x0b'
    , FIELDQUOTE = '0x0b'
    , ROWTERMINATOR = '0x0b'
  )
WITH
  ( jsonContent varchar(8000) ) AS [r]
WHERE
  JSON_VALUE(jsonContent, '$.title') = 'Probabilistic and Statistical Methods in Cryptology, An Introduction by Selected Topics'

重要

我们将整个 JSON 文件读取为单个行/列。 因此 FIELDTERMINATOR、FIELDQUOTE 和 ROWTERMINATOR 已设置为 0x0b,原因是我们预期不会在文件中找到它。

后续步骤

现在,你可以继续学习以下文章了: