SELECT sys.split(split_size)FROM BlobStorage
从 CSV 格式的数据读取值时,所有值都作为字符串读取。 使用 CAST 表达式可以将字符串值转换为其他类型。 根据上下文,值可以隐式强制转换为其他类型。 有关详细信息,请参阅数据类型优先级 (transact-SQL)。
对于 JSON 格式的数据或带有标题行的 CSV 格式的数据,可以按名称引用字段。 字段名称可以带引号或不带引号。 带引号的字段名称将用双引号字符 ("
) 括起来,可以包含空格,并且区分大小写。 未加引号的字段名称不区分大小写,并且不能包含任何特殊字符。
在 CSV 格式的数据中,字段也可以按序号引用,并以下划线 (_
) 字符作为前缀。 例如,第一个字段可引用为 _1
,或者第 11 个字段可引用为 _11
。 按序号引用字段适用于不包含标题行的 CSV 格式的数据,在这种情况下,按序号引用是引用特定字段的唯一方法。
支持以下标准 SQL 运算符:
如果运算符左侧和右侧的数据类型不同,则将根据此处指定的规则执行自动转换:数据类型优先级 (Transact-SQL) 。
查询加速 SQL 语言仅支持本文中讨论的数据类型的一小部分。 请参阅本文的数据类型部分。
根据此处的规则:数据类型转换(数据库引擎),查询加速 SQL 语言支持 CAST 运算符。
查询加速 SQL 语言仅支持本文中讨论的数据类型的很小一部分。 请参阅本文的数据类型部分。
字符串函数
查询加速 SQL 语言支持以下标准 SQL 字符串函数:
CHAR_LENGTH
如果字符串表达式是字符数据类型,则按字符返回字符串表达式的长度;否则,按字节返回字符串表达式的长度(最小整数不小于位数除以 8)。 (此函数与 CHARACTER_LENGTH 函数相同。)
CHARACTER_LENGTH
如果字符串表达式是字符数据类型,则按字符返回字符串表达式的长度;否则,按字节返回字符串表达式的长度(最小整数不小于位数除以 8)。 (此函数与 CHAR_LENGTH 函数相同)
LOWER
将大写字符数据转换为小写字符数据后返回字符表达式。
UPPER
返回小写字符数据转换为大写的字符表达式。
SUBSTRING
返回 SQL Server 中的字符、二进制文件、文本或图像表达式的一部分。
删除字符串开头和结尾的空格字符 char(32) 或其他指定字符。
LEADING
删除字符串开头的空格字符 char(32) 或其他指定字符。
TRAILING
删除字符串结尾的空格字符 char(32) 或其他指定字符。
下面是几个示例:
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
DATE_DIFF 函数
对于 DATE_DIFF
函数,查询加速 SQL 语言支持年、月、日、小时、分钟和秒。
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
对于 EXTRACT,除 DATE_ADD
函数支持的日期部分外,查询加速 SQL 语言还支持将 timezone_hour 和 timezone_minute 作为日期部分。
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
TO_STRING 函数
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
下表描述了可用于指定 TO_STRING
函数的输出格式的字符串。
格式字符串
MISSING
IS MISSING
运算符是查询加速 SQL 语言支持的唯一非标准用法。 对于 JSON 数据,如果特定输入记录中缺少某个字段,则表达式字段 IS MISSING
将计算为布尔值 true。
对于 CSV 数据,表名称始终为 BlobStorage
。 例如:
SELECT * FROM BlobStorage
对于 JSON 数据,可以使用其他选项:
SELECT * FROM BlobStorage[*].path
这允许对 JSON 数据的子集进行查询。
对于 JSON 查询,你可以在 FROM 子句中的某部分提及路径。 这些路径将帮助分析 JSON 数据的子集。 这些路径可以引用 JSON 数组和对象值。
我们来看一个示例,以便更详细地了解这一点。
这是示例数据:
"id": 1,
"name": "mouse",
"price": 12.5,
"tags": [
"wireless",
"accessory"
"dimensions": {
"length": 3,
"width": 2,
"height": 2
"weight": 0.2,
"warehouses": [
"latitude": 41.8,
"longitude": -87.6
你可能只对上述数据的 warehouses
JSON 对象感兴趣。
warehouses
对象是一个 JSON 数组类型,因此你可以在 FROM 子句中提及它。 示例查询将如下所示:
SELECT latitude FROM BlobStorage[*].warehouses[*]
查询将获取所有字段,但仅选择纬度。
如果只想访问 dimensions
JSON 对象的值,则可以在查询中使用引用该对象。 例如:
SELECT length FROM BlobStorage[*].dimensions
这还限制了对 dimensions
对象成员的访问。 如果要访问 json 字段的其他成员和 JSON 对象的内部值,则可以使用如下面的示例中所示的查询:
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
BlobStorage 和 BlobStorage[*] 均引用整个对象。 但是,如果在 FROM 子句中有路径,则需要使用 BlobStorage [*].path
Sys.Split
这是 SELECT 语句的一种特殊形式,仅适用于 CSV 格式的数据。
SELECT sys.split(split_size) FROM BlobStorage
如果要成批下载并批处理 CSV 数据记录,请使用此语句。 通过这种方式,你可以并行处理记录,而无需一次下载所有记录。 此语句不从 CSV 文件返回记录。 而是返回批大小的集合。 然后,可以使用每个批大小检索一批数据记录。
使用 split_size 参数可指定每个批包含的字节数。 例如,如果希望一次只处理 10 MB 的数据,则语句将如下所示:SELECT sys.split(10485760)FROM BlobStorage
,因为 10 MB 等于 10,485,760 字节。 每个批最多可容纳 10 MB 的记录。
在大多数情况下,每个批的大小将略高于你指定的数字。 这是因为批不能包含部分记录。 如果批中的最后一条记录在阈值结束之前开始,则该批需要更大的容量才能包含完整记录。 最后一个批的大小可能小于指定的大小。
split_size 必须至少为 10 MB (10485760)。
Azure Data Lake Storage 查询加速