我正在浏览Azure文档,发现了以下短语Synapse SQL中的OPENROWSET函数从数据源读取文件的内容。数据源是Azure存储帐户,可以在OPENROWSET函数中显式引用,也可以从要读取的文件的URL动态推断。1.数据是在哪里加载和处理的--是在内存中吗?它是不是像Spark那样分块加载数据?1.而且,似乎Openrowset受无服务器sql池支持,而不受专用sql池支持--这样做的理由可能是什么,尽管这两个池都由实际上本机支持OPENROWSET的MS sql服务器备份。
am46iovg1#
Synapse SQL中的OPENROWSET函数从数据源读取文件的内容。数据源是Azure存储帐户,可以在OPENROWSET函数中显式引用,也可以从要读取的文件的URL动态推断。1.数据是在哪里加载和处理的--是在内存中吗?它是不是像Spark那样分块加载数据?由于OPENROWSET函数仅在无服务器Synapse SQL中支持,目前它采用无服务器架构,只有一个计算节点。根据需要扩展分布式计算。您的数据在多个分布式小任务中查询,这些任务由一个计算节点支持,这与Dedicated synapse SQL中每个任务的专用计算节点不同。无服务器SQL中的分布式查询处理引擎会将所有SQL查询转换为一个小任务,并将这些任务分配给一个计算节点,它将从存储帐户查询数据。无服务器Spark Pool和无服务器SQL都工作在相同的体系结构上,在需要运行查询时扩展计算,并在不需要时将其缩小。
图像参考-Synapse SQL architecture - Azure Synapse Analytics | Microsoft Learn要从Azure存储读取和访问文件,可使用2种类型的方法。OPENROWSET和外部表。OPENROWSET用于以行集的形式获取Azure存储中的数据,它可以用于通过各种Azure广告认证连接到远程数据源,也可以用于获取批量数据,直接从Azure存储中以行集的形式获取多个数据集,类似于SQL的FROM子句。外部表用于读取位于Hadoop、Azure存储、Azure存储Blob、数据湖存储中的数据。而且似乎Openrowset也支持无服务器SQL池和专用sql池不支持-可能是什么这样做的理由,尽管两个池都由MS sql备份实际上本机支持OPENROWSET的服务器。若要连接到对数据源的不频繁引用,请将OPENROWSET或OPENDATASOURCE方法与指定的信息一起使用,以连接到不频繁访问的链接服务器。然后,将行集作为SQL表中的事务SQL语句进行引用。目前,Azure专用Synapse SQL不支持OPENROWSET函数。参考此处:-https://learn.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql?view=sql-server-ver16[斯特凡·阿扎里奇]查询:-
OPENROWSET ({ BULK 'unstructured_data_path' . [DATA_SOURCE = <data source name>, ] FORMAT ['PARQUET' | 'DELTA'] } ) [WITH ( {'column_name' 'column_type' }) ] [AS] table_alias(column_alias, ...n)
Openrowset使用FROM子句,批量数据源设置为Azure存储帐户,格式支持csv、parquet、delta、json。
SELECT * FROM OPENROWSET( BULK '<storagefile-url>, FORMAT = '<format-of-file> PARSER_VERSION = '2.0' HEADER_ROW = True ) as rowsFromFile
附条款-
SELECT * FROM OPENROWSET( BULK '<storagefile-url>, FORMAT = '<format-of-file> PARSER_VERSION = '2.0' HEADER_ROW = True ) WITH ( columnname ) as output-table
因为,这是基于无服务器架构的,每个查询都分布在小任务中,并由一个计算节点运行。
1条答案
按热度按时间am46iovg1#
Synapse SQL中的OPENROWSET函数从数据源读取文件的内容。数据源是Azure存储帐户,可以在OPENROWSET函数中显式引用,也可以从要读取的文件的URL动态推断。
1.数据是在哪里加载和处理的--是在内存中吗?它是不是像Spark那样分块加载数据?
由于OPENROWSET函数仅在无服务器Synapse SQL中支持,目前它采用无服务器架构,只有一个计算节点。根据需要扩展分布式计算。您的数据在多个分布式小任务中查询,这些任务由一个计算节点支持,这与Dedicated synapse SQL中每个任务的专用计算节点不同。无服务器SQL中的分布式查询处理引擎会将所有SQL查询转换为一个小任务,并将这些任务分配给一个计算节点,它将从存储帐户查询数据。无服务器Spark Pool和无服务器SQL都工作在相同的体系结构上,在需要运行查询时扩展计算,并在不需要时将其缩小。
图像参考-Synapse SQL architecture - Azure Synapse Analytics | Microsoft Learn
要从Azure存储读取和访问文件,可使用2种类型的方法。
OPENROWSET和外部表。
OPENROWSET用于以行集的形式获取Azure存储中的数据,它可以用于通过各种Azure广告认证连接到远程数据源,也可以用于获取批量数据,直接从Azure存储中以行集的形式获取多个数据集,类似于SQL的FROM子句。
外部表用于读取位于Hadoop、Azure存储、Azure存储Blob、数据湖存储中的数据。
而且似乎Openrowset也支持无服务器SQL池和
专用sql池不支持-可能是什么
这样做的理由,尽管两个池都由MS sql备份
实际上本机支持OPENROWSET的服务器。
若要连接到对数据源的不频繁引用,请将OPENROWSET或OPENDATASOURCE方法与指定的信息一起使用,以连接到不频繁访问的链接服务器。然后,将行集作为SQL表中的事务SQL语句进行引用。
目前,Azure专用Synapse SQL不支持OPENROWSET函数。
参考此处:-
https://learn.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql?view=sql-server-ver16
[斯特凡·阿扎里奇]
查询:-
Openrowset使用FROM子句,批量数据源设置为Azure存储帐户,格式支持csv、parquet、delta、json。
附条款-
因为,这是基于无服务器架构的,每个查询都分布在小任务中,并由一个计算节点运行。