Aracılığıyla paylaş


Birincil anahtar kısıtlamalarını kullanarak sorgu iyileştirme

Tablolardaki alanlar arasındaki ilişkileri yakalayan birincil anahtar kısıtlamaları, kullanıcıların ve araçların verilerinizdeki ilişkileri anlamasına yardımcı olabilir. Bu makale, bazı yaygın sorgu türlerini iyileştirmek için RELY seçeneğiyle birincil anahtarları nasıl kullanabileceğinizi gösteren örnekler içerir.

Not

Komutla RELY ilişkili sorgu iyileştirmeleri, sorguların Photon özellikli işlemde çalıştırılmasını gerektirir. Bkz . Photon nedir?. Foton, varsayılan olarak SQL ambarlarında ve not defterleri ve iş akışları için sunucusuz işlemde çalışır. Photon hakkında daha fazla bilgi edinmek için bkz . Photon nedir?.

Birincil anahtar kısıtlamaları ekleme

Aşağıdaki örnekte olduğu gibi tablo oluşturma deyiminize birincil anahtar kısıtlaması ekleyebilir veya ADD CONSTRAINT yan tümcesini kullanarak tabloya bir kısıtlama ekleyebilirsiniz.

CREATE TABLE customer (
  c_customer_sk int,
  PRIMARY KEY (c_customer_sk)
  ...
  )

Bu örnekte müşteri c_customer_sk kimliği anahtarı verilmiştir. Birincil anahtar kısıtlaması, her müşteri kimliği değerinin tabloda benzersiz olması gerektiğini belirtir. Azure Databricks temel kısıtlamaları zorlamaz. Bunlar mevcut veri işlem hattınız veya ETL aracılığıyla doğrulanabilir. Akış tabloları ve gerçekleştirilmiş görünümler üzerinde çalışma beklentilerini öğrenmek için, İşlem hattı beklentileriyle veri kalitesini yönetme konularına bakın. Delta tablolarında kısıtlamalarla çalışma hakkında bilgi edinmek için bkz. Azure Databricks Kısıtlamaları.

Not

Bir kısıtlamanın karşılanıp karşılanmadığını denetlemek kullanıcının sorumluluğundadır. Karşılanmamış bir kısıtlamaya güvenmek yanlış sorgu sonuçlarına neden olabilir.

İyileştirmeleri etkinleştirmek için kullanın RELY

Birincil anahtar kısıtlamasının geçerli olduğunu bildiğinizde, RELY seçeneğiyle belirterek kısıtlamaya göre iyileştirmeleri etkinleştirebilirsiniz. Tam söz dizimi için bkz. ADD CONSTRAINT yan tümcesi.

RELY seçeneği, Azure Databricks'in sorguları yeniden yazma kısıtlamasını kullanmasına olanak tanır. Aşağıdaki iyileştirmeler yalnızca seçenek bir RELY yan tümcede veya ADD CONSTRAINT deyimde belirtilmişse ALTER TABLE gerçekleştirilebilir.

ALTER TABLE kullanarak, aşağıdaki örnekte gösterildiği gibi bir tablonun birincil anahtarını RELY seçeneğini ekleyerek değiştirebilirsiniz.


ALTER TABLE
  customer DROP PRIMARY KEY;
ALTER TABLE
  customer
ADD
  PRIMARY KEY (c_customer_sk) RELY;

İyileştirme örnekleri

Aşağıdaki örnekler, customerc_customer_sk seçeneği belirtilen PRIMARY KEY olarak adlandırılan doğrulanmış bir benzersiz tanımlayıcı olduğu bir RELY tablosu oluşturan önceki örneği genişletir.

Örnek 1: Gereksiz toplamaları ortadan kaldırma

Aşağıda, birincil anahtara işlem uygulayan bir DISTINCT sorgu gösterilmektedir.

SELECT
  DISTINCT c_customer_sk
FROM
  customer;

c_customer_sk sütunu doğrulanmış bir PRIMARY KEY kısıtlaması olduğundan, sütundaki tüm değerler benzersizdir. RELY seçeneği belirtildiğinde Azure Databricks, DISTINCT işlemini gerçekleştirmeyerek sorguyu iyileştirebilir.

Örnek 2: Gereksiz birleştirmeleri ortadan kaldırma

Aşağıdaki örnekte, Azure Databricks'in gereksiz bir katılımı ortadan kaldırabileceği bir sorgu gösterilmektedir.

Sorgu, store_sales olgu tablosunu customerboyut tablosuyla birleştirir. Sol dış birleştirme gerçekleştirir, bu nedenle sorgu sonucu store_sales tablosundaki tüm kayıtları ve customer tablosundaki eşleşen kayıtları içerir. customer tablosunda eşleşen kayıt yoksa, sorgu sonucu NULL sütunu için c_customer_sk bir değer gösterir.

SELECT
  SUM(ss_quantity)
FROM
  store_sales ss
  LEFT JOIN customer c ON ss.customer_sk = c.c_customer_sk;

Bu birleştirmenin neden gereksiz olduğunu anlamak için sorgu ifadesini göz önünde bulundurun. Yalnızca ss_quantity tablosundaki store_sales sütununu gerektirir. customer tablosu birincil anahtarında birleştirildiğinden, her store_sales satırı customeriçindeki en fazla bir satırla eşleşmektedir. İşlem bir dış birleşim olduğundan, store_sales tablosundaki tüm kayıtlar korunur, bu nedenle birleşim bu tablodaki verileri değiştirmez. SUM toplama, bu tabloların birleştirilip birleştirilmemesiyle aynıdır.

birincil anahtar kısıtlamasını RELY ile kullanmak, sorgu iyileştiricisine birleştirmeyi ortadan kaldırmak için gereken bilgileri verir. İyileştirilmiş sorgu aşağıdaki gibi görünür:

SELECT
  SUM(ss_quantity)
FROM
  store_sales ss

Sonraki adımlar

Katalog Gezgini kullanıcı arabiriminde birincil anahtar ve yabancı anahtar ilişkilerini keşfetmeyi öğrenmek için bkz. Varlık İlişkisi Diyagramını Görüntüleme.