Google BigQuery'de federasyon sorguları çalıştırma

Bu sayfada, Azure Databricks tarafından yönetilmeyen BigQuery verileri üzerinde federasyon sorguları çalıştırmak için Lakehouse Federasyon'un nasıl ayarlanacağı açıklanır. Lakehouse Federasyonu hakkında daha fazla bilgi edinmek için bkz. Lakehouse Federasyonu nedir?

Lakehouse Federation kullanarak BigQuery veritabanınıza bağlanmak için Azure Databricks Unity Kataloğu meta veri deponuzda aşağıdakileri oluşturmanız gerekir (9 Kasım 2023'den sonra oluşturulan çalışma alanlarında zaten otomatik olarak sağlanan bir Unity Kataloğu meta deposu vardır):

  • BigQuery veritabanınızla bağlantı.
  • Unity Kataloğu'ndaki BigQuery veritabanınızı yansıtan bir yabancı katalog; böylece Unity Kataloğu sorgu söz dizimini ve veri idare araçlarını kullanarak Azure Databricks kullanıcısının veritabanına erişimini yönetebilirsiniz.

Başlamadan önce

Çalışma alanı gereksinimleri:

  • Unity Kataloğu için etkinleştirilen çalışma alanı.

İşlem gereksinimleri:

  • Databricks Runtime kümenizden veya SQL ambarından hedef veritabanı sistemlerine ağ bağlantısı. Bkz Lakehouse Federasyonu için ağ önerileri.
  • Azure Databricks kümeleri Databricks Runtime 16.1 veya üzerini ve standart veya ayrılmış erişim modunu (eski adıyla paylaşılan ve tek kullanıcı) kullanmalıdır.
  • SQL ambarları Pro veya Sunucusuz olmalıdır.

Gerekli izinler:

  • Bağlantı oluşturmak için, CREATE CONNECTION çalışma alanına bağlı Unity Catalog metastore üzerinde yetkilerine sahip olmanız gerekir.
  • Yabancı katalog oluşturmak için meta veri deposunda CREATE CATALOG iznine sahip olmanız ve bağlantının sahibi olmanız veya bağlantıda CREATE FOREIGN CATALOG ayrıcalığına sahip olmanız gerekir.

Aşağıdaki her görev tabanlı bölümde ek izin gereksinimleri belirtilir.

Bağlantı oluşturma

Bağlantı, bir dış veritabanı sistemine erişmek için bir yol ve kimlik bilgileri belirtir. Bağlantı oluşturmak için, Bir Azure Databricks not defterinde veya Databricks SQL sorgu düzenleyicisinde Katalog Gezgini'ni veya CREATE CONNECTION SQL komutunu kullanabilirsiniz.

Not

Bağlantı oluşturmak için Databricks REST API'sini veya Databricks CLI'yi de kullanabilirsiniz. bkz. POST /api/2.1/unity-catalog/connections ve Unity Catalog komutları.

Gerekli izinler: Meta veri deposu yöneticisi veya ayrıcalığına CREATE CONNECTION sahip kullanıcı.

Katalog Tarayıcısı

  1. Azure Databricks çalışma alanınızda Veri simgesine tıklayın.Katalog'a gidin.

  2. Katalog bölmesinin üst kısmında Ekle veya artı simgesi Ekle simgesine tıklayın ve menüden Bağlantı oluştur'u seçin.

  3. Bağlantı ayarlama sihirbazının Bağlantı temel bilgileri sayfasında,kullanıcı dostu bir Bağlantı adı girin.

  4. bir Google BigQueryBağlantı türü seçin ve ardından İleriöğesine tıklayın.

  5. Kimlik Doğrulaması sayfasında, BigQuery örneğiniz için Google hizmet hesabı anahtarı json dosyasını girin.

    Bu, BigQuery projesini belirtmek ve kimlik doğrulaması sağlamak için kullanılan ham bir JSON nesnesidir. Bu JSON nesnesini oluşturabilir ve Google Cloud'daki hizmet hesabı ayrıntıları sayfasından 'KEYS' altında indirebilirsiniz. Hizmet hesabının BigQuery Kullanıcı ve BigQuery Veri Görüntüleyicisi de dahil olmak üzere BigQuery'de verilen uygun izinlere sahip olması gerekir. Aşağıda bir örnek verilmiştir.

    {
      "type": "service_account",
      "project_id": "PROJECT_ID",
      "private_key_id": "KEY_ID",
      "private_key": "PRIVATE_KEY",
      "client_email": "SERVICE_ACCOUNT_EMAIL",
      "client_id": "CLIENT_ID",
      "auth_uri": "https://accounts.google.com/o/oauth2/auth",
      "token_uri": "https://accounts.google.com/o/oauth2/token",
      "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
      "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL",
      "universe_domain": "googleapis.com"
    }
    
  6. (İsteğe bağlı) BigQuery örneğinin Proje Kimliği girin:

    Bu, bu bağlantı altında çalıştırılacak tüm sorgular için faturalama için kullanılan BigQuery projesinin adıdır. Varsayılan olarak hizmet hesabınızın proje kimliğine ayarlanır. Hizmet hesabının BigQuery'de bu proje için BigQuery Kullanıcıdahil olmak üzere uygun izinlere sahip olması gerekir. BigQuery tarafından geçici tabloları depolamak için kullanılan ek veri kümesi bu projede oluşturulabilir.

  7. (İsteğe bağlı) Açıklama ekleyin.

  8. Bağlantıoluştur'a tıklayın.

  9. Kataloğu temel bilgileri sayfasında, yabancı katalog için bir ad girin. Yabancı bir katalog, bir dış veri sistemindeki bir veritabanını yansıtarak Azure Databricks ve Unity Kataloğu'nu kullanarak bu veritabanındaki verileri sorgulamanıza ve yönetmenize olanak tanır.

  10. (İsteğe bağlı) Bağlantı test et'e tıklayarak çalıştığını onaylayın.

  11. Katalog oluştur'e tıklayın.

  12. Access sayfasında, kullanıcıların oluşturduğunuz kataloğa erişebileceği çalışma alanlarını seçin. Tüm çalışma alanlarınınerişimi seçebilir veyaçalışma alanlarına ata'ya tıklayabilir, çalışma alanlarını seçip ata'ya tıklayabilirsiniz.

  13. Katalogdaki tüm nesnelerin erişimini yönetebilecek olan kişiyi, Sahibi olarak değiştirin. Metin kutusuna bir sorumlu yazmaya başlayın ve görüntülenen sonuçlarda sorumluya tıklayın.

  14. Katalogda Ayrıcalıkları tanıyın. ver, tıklayın

    1. Katalogdaki nesnelere erişimi olacak Sorumlularını belirtin. Metin kutusuna bir sorumlu yazmaya başlayın ve görüntülenen sonuçlarda sorumluya tıklayın.
    2. Her bir sorumluya vermek üzere Privilege ön ayarlarını seçin. Tüm hesap kullanıcılarına varsayılan olarak BROWSE verilir.
      • Katalogdaki nesnelerde ayrıcalıkları vermek için açılan menüden veri okuyucu seçin.
      • Katalogdaki nesnelerde ve read ayrıcalıkları vermek için açılan menüden modify seçin.
      • Vermek istediğiniz ayrıcalıkları el ile seçin.
    3. ver'e tıklayın.
  15. Sonrakiöğesine tıklayın.

  16. Meta Veri sayfasında, etiket anahtar-değer çiftlerini belirtin. Daha fazla bilgi için bkz. Unity Kataloğu üzerindeki güvenli hale getirilebilir nesnelere etiket uygulama.

  17. (İsteğe bağlı) Açıklama ekleyin.

  18. Kaydet'e tıklayın.

SQL

Aşağıdaki komutu bir not defterinde veya Databricks SQL sorgu düzenleyicisinde çalıştırın. değerini BigQuery projesini belirten ve kimlik doğrulaması sağlayan ham bir JSON nesnesiyle değiştirin <GoogleServiceAccountKeyJson> . Bu JSON nesnesini oluşturabilir ve Google Cloud'daki hizmet hesabı ayrıntıları sayfasından 'KEYS' altında indirebilirsiniz. Hizmet hesabının BigQuery Kullanıcısı ve BigQuery Veri Görüntüleyicisi dahil olmak üzere BigQuery'de uygun izinlere sahip olması gerekir. Örnek bir JSON nesnesi için bu sayfadaki Katalog Gezgini sekmesini görüntüleyin.

CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
  GoogleServiceAccountKeyJson '<GoogleServiceAccountKeyJson>'
);

Kimlik bilgileri gibi hassas değerler için düz metin dizeleri yerine Azure Databricks gizli dizileri kullanmanızı öneririz. Örneğin:

CREATE CONNECTION <connection-name> TYPE bigquery
OPTIONS (
  GoogleServiceAccountKeyJson secret ('<secret-scope>','<secret-key-user>')
)

Gizli bilgileri ayarlama hakkında bilgi için bkz Gizli bilgi yönetimi.

Yabancı katalog oluşturma

Not

Kullanıcı arabirimini veri kaynağına bağlantı oluşturmak için kullanırsanız, yabancı katalog oluşturma dahil edilir ve bu adımı atlayabilirsiniz.

Yabancı bir katalog, bir dış veri sistemindeki bir veritabanını yansıtarak Azure Databricks ve Unity Kataloğu'nu kullanarak bu veritabanındaki verileri sorgulamanıza ve yönetmenize olanak tanır. Yabancı katalog oluşturmak için, önceden tanımlanmış olan veri kaynağına bir bağlantı kullanın.

Yabancı katalog oluşturmak için, Bir Azure Databricks not defterinde veya Databricks SQL sorgu düzenleyicisinde Katalog Gezgini'ni veya CREATE FOREIGN CATALOG kullanabilirsiniz. Katalog oluşturmak için Databricks REST API'sini veya Databricks CLI'yi de kullanabilirsiniz. Bkz. POST /api/2.1/unity-catalog/catalogs veya Unity Catalog komutları.

gerekli izinler:CREATE CATALOG meta veri deposu üzerindeki izin ve bağlantının sahipliği veya CREATE FOREIGN CATALOG bağlantı üzerindeki ayrıcalık.

Katalog Tarayıcısı

  1. Azure Databricks çalışma alanınızda Veri simgesine tıklayın.Katalog gezginini açmak için katalog.

  2. Kataloğu bölmesinin üst kısmında Ekle veya artı simgesine tıklayın ekle simgesine tıklayın ve menüden Katalog ekle seçin.

    Alternatif olarak, Hızlı erişim sayfasında Kataloglar düğmesine tıklayın ve ardından Katalog oluştur düğmesine tıklayın.

  3. (İsteğe bağlı) Aşağıdaki katalog özelliğini girin:

    Veri Projesi Kimliği: Bu kataloğa eşlenecek verileri içeren BigQuery projesinin adı. Varsayılan olarak, bağlantı düzeyinde ayarlanan faturalama projesi kimliğini kullanır.

  4. katalog oluşturma bölümünde yabancı katalog oluşturma yönergelerini izleyin.

  5. (İsteğe bağlı) Aşağıdaki katalog seçeneklerini belirtin:

    • Materialization Dataset: Sorgu sonuçlarının gerçekleştirilmesi için kullanılacak isteğe bağlı bir BigQuery veri kümesi adı. Belirtilmediği takdirde, ihtiyaç duyulduğunda otomatik olarak bir maddeselleştirme veri kümesi sağlanır. Daha fazla bilgi için Gerçekleştirme'ye bakın.
    • BIGNUMERIC Default Scale: BigQuery'yi BIGNUMERIC Spark'a DecimalTypeeşlemek için isteğe bağlı bir ölçek değeri. Daha fazla bilgi için bkz. Veri türü eşlemeleri .

SQL

Aşağıdaki SQL komutunu bir not defterinde veya Databricks SQL düzenleyicisinde çalıştırın. Köşeli ayraç içindeki öğeler isteğe bağlıdır. Yer tutucu değerlerini değiştirin.

  • <catalog-name>: Azure Databricks'teki kataloğun adı.
  • <connection-name>: Veri kaynağını, yolu ve erişim kimlik bilgilerini belirten bağlantı nesnesi.
  • <data-project-id>: Bu kataloğa eşlenecek verileri içeren BigQuery projesinin isteğe bağlı proje kimliği. Belirtilmezse, bağlantıda ayarlanan proje kimliği ve ardından hizmet hesabının proje kimliği kullanılır.
  • <dataset-name>: Sorgu sonuçlarının gerçekleştirilmesi için kullanılacak isteğe bağlı bir BigQuery veri kümesi adı. Belirtilmediği takdirde, ihtiyaç duyulduğunda otomatik olarak bir maddeselleştirme veri kümesi sağlanır. Daha fazla bilgi için Gerçekleştirme'ye bakın.
  • <scale>: BigQuery'yi 0 Spark'a 38eşlemek için isteğe bağlı bir ölçek değeri [BIGNUMERIC, DecimalType(38, scale)] . Varsayılan 38 değeridir. Daha fazla bilgi için bkz. Veri türü eşlemeleri .
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
[OPTIONS (dataProjectId '<data-project-id>', materializationDataset '<dataset-name>', bigNumericDefaultScale '<scale>')];

Maddi Gerçekleşme

Diğer federasyon bağlayıcılarından farklı olarak, BigQuery bağlayıcısı gelişmiş performans için JDBC yerine BigQuery Depolama API'lerini kullanır. Azure Databricks, BigQuery'den doğrudan depolama alanından veya malzeme veri kümesi kullanarak okuyabilir. Doğrudan okumalar, büyük taramalar için daha iyi performans sunar ve filtre ve projeksiyon gönderimlerini destekler. Materyalizasyon, sonuçları Azure Databricks'e akış yoluyla aktarmadan önce sınır, toplamalar, birleştirmeler, sıralama gibi ek işlemleri BigQuery hesaplama sistemine gönderir.

Görünümler ve dış tablolar her zaman malzeme edilir. Varsayılan olarak, diğer tüm okumalar gerçekleştirme işlemi olmadan doğrudan depolama kullanır.

Gelişmiş gönderimler yapmanız gerekiyorsa, büyük veri kümelerinden küçük sonuç kümeleri okuyorsanız veya bölgeler arası veri okuyorsanız, malzemeleşmeyi etkinleştirmeyi göz önünde bulundurun. Malzemeleştirme, ek BigQuery işlem ücretlerine yol açar. Gerçekleştirmeyi etkinleştirmek için aşağıdaki Spark yapılandırmasını ayarlayın:

SET spark.databricks.bigquery.enableMaterialization = true;

Varsayılan olarak, gerektiğinde bir gerçekleştirme veri kümesi otomatik olarak sağlanır. Yabancı kataloğu oluştururken veya değiştirirken katalog seçeneğini kullanarak materializationDataset özel bir veri kümesi belirtebilirsiniz. Bu, hizmet hesabının veri kümesi oluşturma izinleri yoksa veya geçici gerçekleştirme tablolarının nerede depolandığını denetlemek istiyorsanız kullanışlıdır. Örneğin:

CREATE FOREIGN CATALOG my_catalog USING CONNECTION my_bq_connection
OPTIONS (materializationDataset 'my_materialization_dataset');

Mevcut kataloğu güncelleştirmek için şunu çalıştırın:

ALTER CATALOG my_catalog OPTIONS (materializationDataset 'my_materialization_dataset');

Desteklenen itilimler

Aşağıdaki pushdown işlemleri malzemeleştirme olmadan desteklenir:

  • Filtreler
  • Projeksiyonlar

Aşağıdaki ek gönderimler, malzemeleştirme etkinleştirildiğinde desteklenir:

  • Sınırlamak
  • İşlevler (kısmi destek, yalnızca filtre ifadeleri: dize işlevleri, matematiksel işlevler, tarih, saat ve zaman damgası işlevleri ve Alias, Cast, SortOrder gibi diğer çeşitli işlevler)
  • Toplamlar
  • Sıralama, sınır ile kullanıldığında
  • Birleştirmeler (Databricks Runtime 16.1 veya üzeri)

Aşağıdaki gönderimler desteklenmez:

  • Pencere işlevleri

Veri türü eşlemeleri

Aşağıdaki tabloda BigQuery to Spark veri türü eşlemesi gösterilmektedir.

BigQuery türü Spark türü
BÜYÜK SAYıSAL, SAYıSAL DecimalType*
INT64 UzunTip
FLOAT64 ÇiftTip
DIZI, COĞRAFYA, ARALıK, JSON, DIZE, YAPı Varchar Tipi
byte İkiliTip
BOOL Boolean türü
TARİH TarihTürü
DATETIME, TIME, TIMESTAMP TimestampType/TimestampNTZType

* BigQuery BIGNUMERIC , Spark'ın maksimum DecimalType hassasiyeti olan 38'i aşan en yüksek 76 basamaklık hassasiyete sahiptir. Varsayılan olarak, BIGNUMERICDecimalType(38, 38) ile eşleştirilir. Ölçeği yapılandırmak için katalog seçeneğini kullanın bigNumericDefaultScale . İzin verilen değerler : [0, 38]. Örneğin, bigNumericDefaultScale = '10', BIGNUMERIC ile DecimalType(38, 10)'yi eşler. BigQuery NUMERIC, belirlenen duyarlık ve ölçekle eşleştirilir.

BigQuery'den okuduğunuzda, BigQuery Timestamp (varsayılan) ise TimestampType Spark preferTimestampNTZ = false ile eşlenir. Eğer Timestamp olursa BigQuery TimestampNTZType, preferTimestampNTZ = true ile eşlenir.

Sorun giderme

Error creating destination table using the following query [<query>]

Yaygın neden: Bağlantı tarafından kullanılan hizmet hesabının BigQuery Kullanıcısı rolü yoktur.

Çözüm:

  1. Bağlantı tarafından kullanılan hizmet hesabına BigQuery Kullanıcı rolü verin. Bu rol, sorgu sonuçlarını geçici olarak depolayan gerçekleştirme veri kümesini oluşturmak için gereklidir.
  2. Sorguyu yeniden çalıştırın.