Prática #3: Tabela de dimensão baseada na chave estrangeira Juntar-uma solução leve para acelerar as consultas despejando dados em arquivos
A definição de junção de QL é muito simples. É o produto cartesiano filtrado de duas tabelas, representado pela sintaxe a junção B em…. A definição geral não captura a essência das operações de junção, criando dificuldades na codificação e otimização. A SPL Redefines se une desconectando-os do produto cartesiano e dividindo-os em dois tipos-junções baseadas em chave estrangeiras e junções principais baseadas em chaves. O SPL usa funções diferentes para lidar com diferentes tipos de junções, que refletem a natureza da Operação. Isso permite que os usuários usem métodos diferentes até estratégias de armazenamento diferentes de acordo com características de junções diferentes, para que os cálculos se tornem mais rápidos. Um tipo de junção é a junção de chave estrangeira, onde o campo comum de uma tabela (chave estrangeira) está associada à chave primária da outra tabela. Tanto a relação entre a tabela de pedidos e a tabela do cliente quanto a tabela de pedidos e a tabela de remetentes são baseados em chave estrangeira. A chave estrangeira de uma tabela é a chave primária da tabela relacionada, cujos valores são únicos. SPL considera a chave estrangeira como objeto. Observe que a chave primária mencionada acima é lógica, cujos valores são únicos na tabela. O campo não é necessariamente a chave principal definida na tabela física, e nem uma chave estrangeira. O outro tipo de junção é o principal baseado em chave. Uma junção primária baseada em chave cria associação entre a chave primária de uma tabela e a chave primária ou parte de outra tabela de uma chave composta. Por exemplo, a chave primária da tabela de pedidos (order_id) está associada ao campo correspondente da tecla primária na tabela de detalhes. O SPL trata a junção principal baseada em chave como uma associação entre objetos de registro ou conjuntos de registros. É necessário ressaltar que a principal parte do uso do SPL para lidar com junções é determinar corretamente o tipo de junção. Somente depois de saber com que tipo de junções você está lidando, você pode escolher o método adequado. A chave para uma determinação correta é examinar o papel da chave primária na junção. Pegue as seguintes tabelas (pedidos, cliente, cidade, estado e remetente) como exemplos, vamos ver como o ESPROC SPL acelera as junções baseadas em chaves estrangeiras por meio de consultas de dados externos. Defina um q3.etl usando a ferramenta ETL. Arraste nas tabelas envolvidas no cálculo: as ordens é a tabela de fato, que é a maior. Para a conveniência da codificação, despeje -a em um arquivo CTX e cada uma das tabelas de dimensão menores em um arquivo BTX. Execute as seguintes configurações para numerizar o campo relacionado. Por exemplo, converta valores do campo City_Id da tabela do cliente para indexar valores na Dimension Table City. Clique duas vezes no espaço em branco na “Expressão/tabela numérica” e selecione a tabela da cidade. Da mesma forma, crie uma tabela de estado baseada no campo State_Id da City Table. Altere a tabela de nome dos pedidos para Ordensq3 (para diferenciá -lo do anterior): Employee_Name não possui uma tabela de dimensão correspondente; portanto, todos os seus valores precisam ser obtidos na tabela ORERSQ3. Crie funcionário da tabela de dimensões: a ordem das operações na janela acima: 1. Clique em Criar coluna numerada enumerada; 2. Clique duas vezes em funcionário_name; 3. Defina o nome da dimensão do funcionário; 4. Defina o nome da coluna do índice da tabela de dimensão como id; 5. Defina o nome da coluna de valor da tabela de dimensão como nome. Em seguida, defina o campo numerizado no OrderSQ3: Código SPL Exemplo 14: Exportar dados e despeje -os para arquivos BTX ou CTX. Na função A13, Pfind () converte o valor do campo City_ID da tabela de clientes em índices da tabela de dimensão correspondente: Código SPL Exemplo 15: Execute a inicialização na inicialização do sistema ou atualização de dados. Execute a inicialização para pré -carregar cada uma das tabelas de dimensão na memória e use a função Env () para armazená -la como uma variável global. Execute pré-associação usando a função run () para converter valores de chave estrangeira para os registros correspondentes na tabela de dimensões, como o A6 faz: os amantes do cliente de sequência de field city_id regular na tabela são transformados nos registros da tabela da cidade correspondentes. Depois que os dados são despejados e inicializados, os cálculos reais começam. Aqui está um exemplo: o exemplo 3.1 ordens do grupo de um estado especificado por remetente e computação frete em cada grupo (inclua nome do remetente no resultado). Declaração sql: selecione Shipper.shipper_id, Shipper.shipper_name, sum (o.shipping_fee) de ordens o ingressar no cliente c em o.customer_id = c.customer_id ingressar na cidade em city.id.city_id_id = c.city_id ingressado no estado.state_id = city.state_id.id_id_id = c.city_id junção grupo de shipper.shipper_id, shipper.shipper_name; Digite o modo de saída do modo de tela cheia, leva 20 segundos para terminar de executar o código SQL acima. Código SPL Exemplo 16: Em A3, Sintaxe Customer_id: Cliente: # Cria associação entre os pedidos de registros e a tabela de clientes no cursor de acordo com o número da sequência #. Depois que a operação de junção terminar, os valores de Customer_ID e Shipper_ID serão convertidos para registrar objetos nas tabelas correspondentes. Como as associações entre as tabelas de dimensão já são criadas na inicialização, o A3 pode usar as propriedades do objeto para gravar o código: Customer_Id.City_Id.State_Id.State_Name. Demora 0,4 segundo para terminar de executar o script SPL. Exemplo 3.2 Registros de grupo de cidades onde os clientes são baseados e encontram o número de pedidos em cada grupo (inclua o nome do estado e o nome da cidade no resultado). selecione City.city_id, city.city_name, state.state_name, count (o.order_id) a partir de ordens o ingressar no cliente c em o.customer_id = c.customer_id ingressar na cidade em c.city_id = city.city_id ingressando estado na cidade.state_id = statestate_id_id by city.city.city_id.dity_id ingressando no estado. Digite o modo de saída do modo de tela cheia, leva 22 segundos para terminar de executar o código SQL. Código SPL Exemplo 17: Com base no Exemplo de Código SPL anterior 16, basta alterar o código do A4: leva 0,3 segundo para terminar de executar o código SPL. Resumo do desempenho (Unidade: Segundo): Exercícios: Encontre registros de pedidos onde os nomes do remetente são Elite Shipping Co., agrupe -os por estados onde os clientes se baseiam e calcule o frete em cada grupo (inclua estado no resultado). Pensamento crítico: você tem alguma tabela relacionada por meio de chaves estrangeiras em um de seus bancos de dados familiares? Você pode usar o método de numerização para acelerar as junções entre eles?
Fonte
Publicar comentário