Configurar o SQL Server para ingestão
Prévia
O LakeFlow Connect está em um Public Preview fechado. Para participar da pré-visualização, entre em contato com a equipe do Databricks account .
Este artigo descreve como configurar o site SQL Server para ingestão. Esse é um pré-requisito para ingerir dados do SQL Server e carregá-los no Databricks usando o LakeFlow Connect.
Change acompanhamento vs. captura de dados de alterações (CDC) (CDC)
Databricks suporta Microsoft captura de dados de alterações (CDC) (CDC) ou Microsoft change acompanhamento to extração de dados from SQL Server. Se uma tabela tiver uma tabela primária key, o site Databricks recomenda o uso do acompanhamento de alterações para otimizar o desempenho. Quando não houver um key primário, o CDC deverá ser usado. Para obter mais informações sobre essas duas opções, consulte Rastrear alterações de dados (SQL Server ) na documentação do site SQL Server.
Para usar o Microsoft captura de dados de alterações (CDC) (CDC), o senhor deve ter o SQL Server 2017 ou superior. Para usar o Microsoft change acompanhamento, o senhor deve ter o SQL Server 2012 ou o acima.
Criar um usuário do SQL Server
A Databricks recomenda que o senhor crie um usuário de banco de dados que seja usado exclusivamente para a ingestão da Databricks.
Esse usuário do banco de dados deve ter os seguintes privilégios, independentemente do método empregado para acompanhar as alterações de dados no banco de dados de origem:
Acesso de leitura às seguintes tabelas e visualizações do sistema:
sys.databases
sys.schemas
sys.tables
sys.columns
sys.key_constraints
sys.foreign_keys
sys.check_constraints
sys.default_constraints
sys.change_tracking_tables
sys.change_tracking_databases
sys.objects
sys.triggers
Permissões de execução nos seguintes procedimentos armazenados no sistema:
sp_tables
sp_columns
sp_columns_100
sp_pkeys
sp_statistics
SELECT
nos esquemas e tabelas que o senhor deseja ingerir.
Habilitar o acompanhamento de mudanças
Para usar o acompanhamento de alterações, o senhor deve ativar o acompanhamento de alterações em todos os bancos de dados e tabelas ingeridos.
Observação
O acompanhamento de alterações só pode ser usado em tabelas com um primário key.
Habilitar o acompanhamento de mudanças em um banco de dados
execute o seguinte, substituindo <database-name>
pelo nome do banco de dados no qual o senhor deseja ativar o acompanhamento de alterações.
ALTER DATABASE <database-name> SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 3 DAYS, AUTO_CLEANUP = ON)
Habilitar a alteração do acompanhamento em uma tabela
execute o seguinte, substituindo <schema-name>.<table-name>
pelo nome do esquema e da tabela em que o senhor deseja ativar o acompanhamento de alterações.
ALTER TABLE <schema-name>.<table-name> ENABLE CHANGE_TRACKING
Permissões de leitura adicionais
O senhor precisa ter o privilégio VIEW CHANGE TRACKING
nas tabelas ingeridas ou em um esquema que contenha tabelas que estejam sendo rastreadas.
Para conceder permissões no nível do esquema, execute o seguinte:
GRANT VIEW CHANGE TRACKING ON SCHEMA::<schema-name> TO <cdc-username>;
Para conceder permissões em nível de tabela, execute o seguinte:
GRANT VIEW CHANGE TRACKING ON OBJECT::<schema-name>.<table-name> TO <cdc-username>;
Configurar a captura de DDL e a evolução do esquema
O conector tem a capacidade de rastrear a linguagem de definição de dados (DDL) nos objetos de banco de dados ingeridos e aplicar alterações relevantes no esquema da tabela às tabelas de destino ou adicionar novas tabelas no caso de replicação de esquema completo.
Para realizar a captura de DDL, é necessário configurar objetos de banco de dados adicionais (por exemplo, tabelas internas, procedimentos armazenados e acionadores). Há duas maneiras de configurá-los:
Automático: Exige que privilégios adicionais sejam concedidos ao usuário de replicação.
Manual: Requer a criação manual de objetos de banco de dados.
Opção 1: Configuração automática para captura de DDL
Databricks requer privilégios adicionais para a captura automática de DDL ao usar o acompanhamento de alterações. Execute o seguinte comando para conceder esses privilégios ao usuário configurado para uso com Databricks:
CREATE PROCEDURE
no banco de dados:GRANT CREATE PROCEDURE TO <cdc-username>;
CREATE TABLE
no banco de dados:GRANT CREATE TABLE TO <cdc-username>;
SELECT
,EXECUTE
eINSERT
no esquema:GRANT SELECT,INSERT,EXECUTE ON SCHEMA::dbo TO <cdc-username>;
ALTER
no banco de dados:GRANT ALTER ON DATABASE::<database-name> TO <cdc-username>;
ALTER
no esquema ou em todas as tabelas a serem ingeridas:GRANT ALTER ON SCHEMA::[<schema-name>] TO [<cdc-username>];
Opção 2: Configuração manual para captura de DDL
Para configurar manualmente a captura de DDL, execute o seguinte:
CREATE TABLE "dbo"."replicate_io_audit_ddl_1"(
"SERIAL_NUMBER" INT IDENTITY NOT NULL,
"CURRENT_USER" NVARCHAR(128),
"SCHEMA_NAME" NVARCHAR(128),
"TABLE_NAME" NVARCHAR(128),
"TYPE" NVARCHAR(30),
"OPERATION_TYPE" NVARCHAR(30),
"SQL_TXT" NVARCHAR(2000),
"LOGICAL_POSITION" BIGINT,
CONSTRAINT "replicate_io_audit_ddlPK" PRIMARY KEY("SERIAL_NUMBER","LOGICAL_POSITION")
)
ALTER TABLE dbo.replicate_io_audit_ddl_1 ENABLE CHANGE_TRACKING;
GRANT VIEW CHANGE TRACKING ON OBJECT::dbo.replicate_io_audit_ddl_1 TO [CdcUserName];
CREATE TABLE dbo.replicate_io_audit_tbl_schema_1(
"COLUMN_ID" BIGINT,
"DATA_DEFAULT" BIGINT,
"COLUMN_NAME" VARCHAR(128) NOT NULL,
"TABLE_NAME" NVARCHAR(128) NOT NULL,
"SCHEMA_NAME" NVARCHAR(128) NOT NULL,
"HIDDEN_COLUMN" NVARCHAR(3),
"DATA_TYPE" NVARCHAR(128),
"DATA_LENGTH" BIGINT,
"CHAR_LENGTH" BIGINT,
"DATA_SCALE" BIGINT,
"DATA_PRECISION" BIGINT,
"IDENTITY_COLUMN" NVARCHAR(3),
"VIRTUAL_COLUMN" NVARCHAR(3),
"NULLABLE" NVARCHAR(1),
"LOGICAL_POSITION" BIGINT);
CREATE TABLE dbo.replicate_io_audit_tbl_cons_1(
"SCHEMA_NAME" VARCHAR(128),
"TABLE_NAME" VARCHAR(128),
"COLUMN_NAME" VARCHAR(4000),
"COL_POSITION" BIGINT,
"CONSTRAINT_NAME" VARCHAR(128),
"CONSTRAINT_TYPE" VARCHAR(1),
"LOGICAL_POSITION" BIGINT);
CREATE OR ALTER TRIGGER replicate_io_audit_ddl_trigger_1
ON DATABASE
AFTER ALTER_TABLE
AS SET NOCOUNT ON;
DECLARE @DbName nvarchar(255), @SchemaName nvarchar(max), @TableName nvarchar(255), @data XML, @operation NVARCHAR(30), @isCTEnabledDBLevel bit, @isCTEnabledTableLevel bit;
SET @data = EVENTDATA();
SET @DbName = DB_NAME();
SET @SchemaName = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(MAX)');
SET @TableName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)');
SET @operation = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(30)');
SET @isCTEnabledDBLevel = (SELECT COUNT(*) FROM sys.change_tracking_databases WHERE database_id=DB_ID(@DbName));
SET @isCTEnabledTableLevel = (SELECT COUNT(*) FROM sys.change_tracking_tables WHERE object_id = object_id(@SchemaName + '.' + @TableName));
IF (@isCTEnabledDBLevel = 1 AND @isCTEnabledTableLevel = 1)
BEGIN
INSERT INTO
dbo.replicate_io_audit_ddl_1
("CURRENT_USER","SCHEMA_NAME", "TABLE_NAME", "TYPE", "OPERATION_TYPE", "SQL_TXT", "LOGICAL_POSITION")
VALUES (SUSER_NAME(),
@data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'NVARCHAR(128)'),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(128)'),
@data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'NVARCHAR(30)'),
@data.value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(30)'),
@data.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
'NVARCHAR(2000)'),
CHANGE_TRACKING_CURRENT_VERSION() );
END
GRANT VIEW DEFINITION ON DATABASE::[YourDatabaseName] TO [CdcUserName];
Habilitar a integração CDC para o banco de dados de origem
Para habilitar o banco de dados de origem para CDC, execute o seguinte procedimento armazenado em Azure SQL, substituindo o valor de <database-name>
. O senhor deve estar conectado ao banco de dados que deseja habilitar para CDC.
USE <database-name>
EXEC sys.sp_cdc_enable_db
Para ativar o CDC em um banco de dados no Amazon RDS para SQL Server, execute o seguinte:
EXEC msdb.dbo.rds_cdc_enable_db '<database-name>'
Para obter mais informações, consulte Ativar captura de dados de alterações (CDC) para um banco de dados na documentação SQL Server.
Habilitar a integração CDC na tabela de origem
Para ativar o CDC na tabela de origem, execute o seguinte procedimento armazenado em Azure SQL:
EXEC sys.sp_cdc_enable_table
@source_schema = N'MySchema',
@source_name = N'MyTable',
@role_name = NULL,
@supports_net_changes = 1
Substitua os valores de
source_schema
,source_name
erole_name
.@support_net_changes
só aceita um valor de1
se a tabela tiver um primário key.
Para obter mais informações, consulte Habilitar captura de dados de alterações (CDC) para uma tabela na documentação do site SQL Server.
Permissões de leitura adicionais
O senhor precisa ter o privilégio SELECT
no esquema cdc
que contém as tabelas de alteração criadas quando o CDC é ativado.
GRANT SELECT ON SCHEMA::cdc to [cdc-username];