在本文中,你将学习如何使用无服务器 SQL 池来编写读取 Parquet 文件的查询。
你可以使用 函数通过提供文件的 URL 来读取 parquet 文件的内容。
查看 文件内容的最简单方法是向 函数提供文件 URL,并指定 parquet 。 如果该文件可公开查看,或者你的 Microsoft Entra 标识有权访问该文件,则你应该可以使用类似于以下示例所示查询的查询来查看该文件的内容:
请确保你可以访问此文件。 如果文件由 SAS 密钥或自定义 Azure 标识保护,则需要为 sql 登录设置服务器级别的凭据。
如果使用 排序规则,与其他排序规则相比,你将获得额外的性能提升。 排序规则与 parquet 字符串排序规则兼容。 SQL 池能够消除 Parquet 文件的某些部分,这些部分将不包含查询中所需的数据(文件/列段修剪)。 如果使用其他排序规则,parquet 文件中的所有数据都将加载到 Synapse SQL 中,并且在 SQL 进程中进行筛选。 排序规则具有仅适用于 parquet 和 CosmosDB 的额外性能优化。 缺点是会丢失细粒度的比较规则,比如不区分大小写。
上面的示例使用了文件的完整路径。 作为替代方法,你可以创建一个外部数据源(其中包含指向存储根文件夹的位置),并在 函数中使用该数据源和指向该文件的相对路径:
如果数据源受到 SAS 密钥或自定义标识保护,则可以使用数据库范围的凭据配置数据源。
使用 ,你可以使用 子句显式指定要从文件中读取的列:
以下各部分介绍了如何查询各种类型的 PARQUET 文件。
第一步是创建数据库,其中包含了引用纽约黄色出租车存储帐户的数据源。 然后通过对该数据库执行安装脚本来初始化这些对象。 此安装脚本将创建数据源、数据库范围的凭据以及在这些示例中使用的外部文件格式。
本示例中使用纽约黄色出租车数据集。 可以使用与读取 CSV 文件相同的方式查询 Parquet 文件。 唯一的区别是 参数应设置为 。 本文中的示例演示了关于读取 Parquet 文件的详细信息。
在查询 Parquet 文件时只能指定所需的列。
读取 Parquet 文件时,无需使用 OPENROWSET WITH 子句。 系统会自动从 Parquet 文件中读取列名称和数据类型。
请记住,如果一次读取多个文件,则将根据服务从存储中获取的第一个文件来推断架构、列名和数据类型。 这可能意味着预期的一些列被省略了,这都是因为服务用来定义架构的文件不包含这些列。 若要显式指定架构,请使用 OPENROWSET WITH 子句。
以下示例演示了适用于 Parquet 文件的自动架构推理功能。 该示例在不指定架构的情况下返回 2018 年 9 月的行数。
此示例中提供的数据集划分(分区)为单独的子文件夹。 可以使用 filepath 函数将特定分区作为目标。 此示例显示 2017 年前三个月的费用金额(按年、月和 payment_type)。
有关 Parquet 类型到 SQL 原生类型的映射,请查看 Parquet 的类型映射。