gpt4 book ai didi

Azure 数据流创建/管理身份关系 key

转载 作者:行者123 更新时间:2023-12-03 04:00:50 24 4
gpt4 key购买 nike

很想知道通过 ADF 生成关系身份的最佳方法是什么。

现在,我正在使用没有任何身份信息的 JSON 数据。然后,该数据被转换为具有关系(1..n 等)的多个数据库接收器表。由于某些目标接收器表上的 FK 约束,这些关系需要一次“建立”一个。

这种方法似乎有点笨拙,所以我想看看是否还有其他我不知道的选项。

请注意,我需要为每个插入包含代理键生成。如果我不这样做,根据输出数据库架构,我将收到“无法插入 PK null”错误。

另请注意,我为每个接收器打开/关闭IDENTITY_INSERT

enter image description here

最佳答案

我倾向于更多地采用 ELT 方法并使用 Azure SQL DB 中的 native JSON 功能,即 OPENJSON。您可以使用 ADF(例如存储过程事件)将 JSON 放入 Azure SQL DB 的表中,然后调用另一个存储过程来处理 JSON,如下所示:

-- Setup
DROP TABLE IF EXISTS #tmp
DROP TABLE IF EXISTS import.City;
DROP TABLE IF EXISTS import.Region;
DROP TABLE IF EXISTS import.Country;
GO

DROP SCHEMA IF EXISTS import
GO

CREATE SCHEMA import
CREATE TABLE Country ( CountryKey INT IDENTITY PRIMARY KEY, CountryName VARCHAR(50) NOT NULL UNIQUE )
CREATE TABLE Region ( RegionKey INT IDENTITY PRIMARY KEY, CountryKey INT NOT NULL FOREIGN KEY REFERENCES import.Country, RegionName VARCHAR(50) NOT NULL UNIQUE )
CREATE TABLE City ( CityKey INT IDENTITY(100,1) PRIMARY KEY, RegionKey INT NOT NULL FOREIGN KEY REFERENCES import.Region, CityName VARCHAR(50) NOT NULL UNIQUE )
GO


DECLARE @json NVARCHAR(MAX) = '{
"Cities": [
{
"Country": "England",
"Region": "Greater London",
"City": "London"
},
{
"Country": "England",
"Region": "West Midlands",
"City": "Birmingham"
},
{
"Country": "England",
"Region": "Greater Manchester",
"City": "Manchester"
},
{
"Country": "Scotland",
"Region": "Lothian",
"City": "Edinburgh"
}
]
}'


SELECT *
INTO #tmp
FROM OPENJSON( @json, '$.Cities' )
WITH
(
Country VARCHAR(50),
Region VARCHAR(50),
City VARCHAR(50)
)
GO


-- Add the Country first (has no foreign keys)
INSERT INTO import.Country ( CountryName )
SELECT DISTINCT Country
FROM #tmp s
WHERE NOT EXISTS ( SELECT * FROM import.Country t WHERE s.Country = t.CountryName )


-- Add the Region next including Country FK
INSERT INTO import.Region ( CountryKey, RegionName )
SELECT t.CountryKey, s.Region
FROM #tmp s
INNER JOIN import.Country t ON s.Country = t.CountryName


-- Now add the City with FKs
INSERT INTO import.City ( RegionKey, CityName )
SELECT r.RegionKey, s.City
FROM #tmp s
INNER JOIN import.Country c ON s.Country = c.CountryName
INNER JOIN import.Region r ON s.Region = r.RegionName
AND c.CountryKey = r.CountryKey


SELECT * FROM import.City;
SELECT * FROM import.Region;
SELECT * FROM import.Country;

这是一个简单的测试脚本,旨在展示这个想法,应该端到端运行,但它不是生产代码。

关于Azure 数据流创建/管理身份关系 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62457704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com