标签: azure-sql-data-warehouse

哪些情况可以从 Reduce、Replicate 和 Redistribute 连接提示中受益?

SQL Server 2008 开始的From 子句文档简要提到了 3 个连接提示及其基本机制:

  • 降低
  • 复制
  • 重新分配

然而,似乎没有太多关于何时可能需要使用它们的信息。

似乎它们可以与散列、循环和合并结合使用,这些已经被理解为这个问题的目的。

文档中的相关部分:

对于 SQL 数据仓库和并行数据仓库,这些联接提示适用于两个分布不兼容的列上的 INNER 联接。它们可以通过限制查询处理期间发生的数据移动量来提高查询性能。SQL 数据仓库和并行数据仓库的允许连接提示如下:

  • REDUCE
    减少要为联接右侧的表移动的行数,以使两个分布不兼容的表兼容。REDUCE 提示也称为半连接提示。

  • REPLICATE
    将连接左侧表的连接列中的值复制到所有节点。右侧的表连接到这些列的复制版本。

  • REDISTRIBUTE
    强制将两个数据源分布在 JOIN 子句中指定的列上。对于分布式表,Parallel Data Warehouse 会执行shuffle move。对于复制表,并行数据仓库将执行修剪移动。要了解这些移动类型,请参阅并行数据仓库产品文档中“了解查询计划”主题中的“DMS 查询计划操作”部分。当查询计划使用广播移动来解决分发不兼容的连接时,此提示可以提高性能。

join sql-server hints sql-server-pdw azure-sql-data-warehouse

8
推荐指数
1
解决办法
364
查看次数

Azure 数据仓库 - 用户定义的函数问题

这里有没有人在Azure 数据仓库数据库上创建和使用 UDF 很幸运?我正在将本地仓库从 SQL Server 2014 迁移到 Azure 数据仓库,但遇到了 UDF 问题。

CREATE FUNCTION dbo.fn_GetImpliedRate (@Multiple float, @term int)
RETURNS float
AS
BEGIN
    DECLARE @ImpInt float
    IF(@Term = 1)
        SET @ImpInt = (select [1] from  dbo.ImpliedRate where Multiple = @Multiple); 
    IF(@Term = 2)
        SET @ImpInt = (select [2] from  dbo.ImpliedRate where Multiple = @Multiple); 
    IF(@Term = 3)
        SET @ImpInt = (select [3] from  dbo.ImpliedRate where Multiple = @Multiple); 
    IF(@Term = 4)
        SET @ImpInt = (select [4] from  dbo.ImpliedRate …
Run Code Online (Sandbox Code Playgroud)

sql-server etl functions azure-sql-data-warehouse

7
推荐指数
2
解决办法
5021
查看次数

为 Azure-SQL-DB 添加 Active Directory 用户

我有一个 Active Directory 用户 LDomain\LUser,我希望该用户能够连接到 Azure-Sql-DB。MS 使用的语法会引发错误。

T-SQL:

CREATE USER [LDomain\LUser] FROM EXTERNAL PROVIDER
Run Code Online (Sandbox Code Playgroud)

错误:

找不到主体“LDomain\LUser”或不支持此主体类型。

我只是在寻找添加 AD 用户的脚本 - 没有界面。我知道 AD 用户存在于 Azure 中并已确认,但 Azure-Sql-DB 无法识别它,或者此 T-SQL 无效 - 尽管这是来自他们的文档。

security azure-sql-database active-directory azure azure-sql-data-warehouse

5
推荐指数
1
解决办法
2万
查看次数

Azure SQL 仓库 - 数据摄取 - 将巨大的固定宽度(带逗号)文件转换为分隔

我什至不确定我是否正确地提出了这个问题,但我会尝试 - 我有一堆从 Linux 系统上的 Oracle 导出生成的巨大文本文件。每个文件大小约为 30 GB,我有大约 50 个。

目标是将此数据导出到 Azure SQL 数据仓库。在这种情况下,考虑到数据的大小,BCP 不是正确的方法,所以我不得不使用 Polybase。

从 ASCII 转换为 UTF8 编码后,我在查询外部表时遇到了问题。Polybase 不能很好地处理固定宽度的文本文件,每行都有一个换行符。

文本文件看起来像这样:

101,102,103,104,105,106,107
108,108,109,110,111,112,113
114,115,116,117,118,119,120
121,122,123

--这里什么都没有,只是一个空行

201、202、203、204、205、206、207
208,209,210,211,212,213,214
215,216,217

Polybase 尝试从 101 到 107 进行处理,并且出现错误,抱怨此文件中没有足够的列可供处理。

这是我认为正在发生的事情:固定宽度和换行符使其将换行符视为行分隔符。

如何将此文件转换为如下所示:

101,102,103,104,105,106,107,108,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123{CR}
201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217{CR}{LF}

编辑:这是来自文件的示例数据。我在 Windows VM 上用 git bash 打开它。

这些文件应该有 167 列,,作为列分隔符。问题是,由于每行产生多行,因此很难从 Polybase 外部表处理它们。

import polybase azure-sql-data-warehouse

5
推荐指数
2
解决办法
1660
查看次数

sys.partitions 行计数严重错误 - 如何纠正?

查询 sys.partitions 可以返回表的近似行数。

我注意到,无论实际内容如何(即使是空分区),这都会为所有分区返回相同的行数。

该表具有聚集列存储索引,并且几乎所有列上都创建了统计信息。每次数据加载后,每天都会更新统计信息。该表按日期分区。

sys.partitions 查询:

    SELECT   convert(date, convert(varchar,rv.[value])) as partitionDate, p.rows as syspartitions_RowCount
        FROM       sys.tables t     
        join       sys.schemas  sc on sc.schema_id = t.schema_id        
        JOIN        sys.partitions p                ON      p.[object_id]         = t.[object_id]
        JOIN        sys.indexes i                   ON      i.[object_id]         = p.[object_id]
                                                    AND     i.[index_id]          = p.[index_id]
        JOIN        sys.data_spaces ds              ON      ds.[data_space_id]    = i.[data_space_id]
        LEFT JOIN   sys.partition_schemes ps        ON      ps.[data_space_id]    = ds.[data_space_id]
        LEFT JOIN   sys.partition_functions pf      ON      pf.[function_id]      = ps.[function_id]
        LEFT JOIN   sys.partition_range_values rv   ON      rv.[function_id]      = pf.[function_id]
                                                    AND     rv.[boundary_id]+1      = p.[partition_number]
        WHERE   p.[index_id] …
Run Code Online (Sandbox Code Playgroud)

sql-server partitioning azure-sql-data-warehouse

5
推荐指数
1
解决办法
5788
查看次数

SQL Server 可以在单个 INSERT 语句中将多少行处理到一个表中?

为了说明我的问题,以下是一个查询,检测尚未插入数据仓库并插入它们的订单的 id:

With NewOrders 
As
(   
    Select OrderID From Orders
    Except
    Select OrderID From FactOrders
)
Insert Into FactOrders(OrderID, OrderDate, CustomerId)
    Select OrderID, OrderDate, CustomerId From Orders
    Where OrderID in (Select OrderID from NewOrders);
Run Code Online (Sandbox Code Playgroud)

假设查询是第一次运行并且Orders包含 4 亿行或更多行:

SQL Server 能否在一条INSERT语句中处理这么多行?

如果没有,我应该如何进行?我应该限制INSERT语句中提取的行数吗?引擎可以在单个INSERT语句中处理多少行?

data-warehouse sql-server t-sql azure-sql-data-warehouse

5
推荐指数
1
解决办法
2774
查看次数

如何在 sql azure 数据仓库中添加检查约束?

我想向 azure数据仓库中的表添加检查约束。

我有以下脚本:

alter table [FactTbl_Test] add constraint Ck_Test_id check ([Test_Id] != 'Unknown')
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

第 2 行解析错误,第 74 列:'check' 附近的语法不正确。

编辑:

如果在表声明中创建约束,也会出现相同的错误。

azure-sql-data-warehouse

2
推荐指数
1
解决办法
3298
查看次数