Birincil anahtar ve benzersiz kısıtlamaları kullanarak sorgu iyileştirme

Tablolardaki alanlar arasındaki benzersizlik ilişkilerini yakalayan birincil anahtar ve benzersiz 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ştirme seçeneğiyle RELY birincil anahtarları veya benzersiz kısıtlamaları 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 veya benzersiz kısıtlamalar ekleme

Aşağıdaki örnekte olduğu gibi tablo oluşturma deyiminize birincil anahtar veya benzersiz kısıtlama ekleyebilir veya yan tümcesini kullanarak tabloya ADD CONSTRAINT bir tane 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. Benzersiz kısıtlamalar, PRIMARY KEY yerine UNIQUE kullanarak aynı deseni izler.

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ın veya benzersiz kısıtlamanın geçerli olduğunu bildiğinizde, kısıtlamayı seçeneğiyle RELY 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 RELY seçeneği bir ADD CONSTRAINT cümle içinde veya ALTER TABLE ifade içerisinde belirtilmişse 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. Aynı iyileştirmeler, RELY seçeneğine sahip bir UNIQUE kısıtlamaya da uygulanabilir.

Ö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.

Eniyileyici, seçilen sütun RELY ile belirtilen geçerli bir UNIQUE kısıtı kapsamında olduğunda DISTINCT öğesini de kaldırabilir.

Ö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ı veya benzersiz bir kısıtı üzerinden birleştirildiğinden, store_sales içindeki her satır customer içinde en fazla bir satırla eşleşir. İş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.

RELY ile birincil anahtarın veya benzersiz kısıtlamanın kullanılması, sorgu iyileştiricisine birleştirmeyi ortadan kaldırmak için ihtiyaç duyduğu bilgileri sağlar. İ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.