sql - Azure Synapse Polybase/外部表 - 我们可以在创建外部表时从文件中获取行号吗
问题描述
我正在尝试从文件中获取行号,同时使用 Azure Synapse 中的 Polybase 将其读取并加载到表中。例如,假设文件(csv)有 3 列,我需要加载具有 4 列的目标表(来自文件的 3 列和保存文件中行/行号的列)。有没有什么 polybase 属性可以用来获取这条线?
我在从外部表中选择时尝试使用 row_number 函数,但是当数据很大时,这会给出不正确的行号(将行号混淆)。我想这是由于 Azure Synapse ( master/slave ) 在概念上构建的。
CREATE EXTERNAL TABLE dbo.EXAMPLE_EXT (
COL1 VARCHAR(5),
COL2 VARCHAR(5),
COL3 VARCHAR(5))
WITH (
LOCATION='../',
DATA_SOURCE=Example_DataSource,
FILE_FORMAT=Example_csvFile
);
INSERT INTO EXAMPLE_TARGET_TABLE (LINE_NUMBER,COL1,COL2,COL3)
SELECT ROW_NUMBER() OVER(ORDER BY NULL) AS LINE_NUMBER, COL1, COL2, COL3
FROM dbo.EXAMPLE_EXT
解决方案
是的,您可以使用“create table as select”添加行号。下面是一个示例脚本,如果您创建了外部数据源,您可以跳过第 1 个。
1.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE =HADOOP ]
)
[ ; ]
2.
CREATE EXTERNAL TABLE dbo.EXAMPLE_EXT (
COL1 VARCHAR(5),
COL2 VARCHAR(5),
COL3 VARCHAR(5))
WITH (
LOCATION='../',
DATA_SOURCE=Example_DataSource,
FILE_FORMAT=Example_csvFile
);
3.
CREATE TABLE EXAMPLE_TARGET_TABLE
WITH
(DISTRIBUTION = ROUND ROBIN
,CLUSTERED COLUMNSTORE INDEX
)
AS
SELECT ROW_NUMBER() OVER(ORDER BY NULL) AS LINE_NUMBER,
*
FROM dbo.EXAMPLE_EXT;
推荐阅读
- ansible - 类似于 yum_repository 的 aws extras 的 Ansible 模块
- strapi - Strapi 插件路由默认权限
- c# - 如何防止组合框选择更改事件的重复方法?
- ruby - 爬取的网站宕机时如何避免收到错误信息
- c# - 如何使用 .net-core 和 Entity Framework Core 和 Identity 从 thenInclude 获取特定列?
- clojure - 无法退回一套
- xml - XSLT 1.0 格式化时间
- reactjs - 使用 URLSearchParams 更新 href 而不是追加
- python - 有没有更好的方法将列数据存储到 Python 列表中
- django-rest-framework - 通过两个字段而不是一个字段过滤 Wagtail API 响应