Aracılığıyla paylaş


Verileri sorgulama

Verileri sorgulama, Azure Databricks'te neredeyse tüm veri temelli görevleri gerçekleştirmek için temel adımdır. Kullanılan dilden veya araçtan bağımsız olarak, iş yükleri bir tablo veya başka bir veri kaynağında sorgu tanımlayıp verilerden içgörü elde etmek için eylemler gerçekleştirerek başlar. Bu makalede, çeşitli Azure Databricks ürün tekliflerinde sorgu çalıştırmaya yönelik temel kavramlar ve yordamlar özetlenmiştir ve kullanım örneğiniz için uyarlayabileceğiniz kod örnekleri yer almaktadır.

Aşağıdakini kullanarak verileri etkileşimli olarak sorgulayabilirsiniz:

  • Dizüstü Bilgisayarlar
  • SQL düzenleyicisi
  • Dosya düzenleyicisi
  • Panolar

Sorguları DLT işlem hatlarının veya işlerinin bir parçası olarak da çalıştırabilirsiniz.

Azure Databricks'te akış sorgularına genel bakış için bkz . Sorgu akışı verileri.

Azure Databricks ile hangi verileri sorgulayabilirsiniz?

Azure Databricks, verileri birden çok biçimde ve kurumsal sistemde sorgulamayı destekler. Azure Databricks kullanarak sorguladığınız veriler iki geniş kategoriden birine ayrılır: Databricks lakehouse'taki veriler ve dış veriler.

Databricks lakehouse'da hangi veriler var?

Databricks Veri Zekası Platformu, tüm verilerinizi varsayılan olarak bir Databricks göl evinde depolar.

Bu, yeni bir tablo oluşturmak için temel bir CREATE TABLE deyimi çalıştırdığınızda bir lakehouse tablosu oluşturduğunuz anlamına gelir. Lakehouse verileri aşağıdaki özelliklere sahiptir:

  • Delta Lake formatında depolanır.
  • Bulut nesne depolama alanında depolanır.
  • Unity Kataloğu tarafından yönetilir.

Azure Databricks'teki göl evi verilerinin çoğu Unity Kataloğu'nda yönetilen tablolar olarak kaydedilir. Yönetilen tablolar en kolay söz dizimini sağlar ve çoğu ilişkisel veritabanı yönetim sistemindeki diğer tablolar gibi davranır. Yönetilen tablolar çoğu kullanım örneği için önerilir ve veri depolamanın uygulama ayrıntıları konusunda endişelenmek istemeyen tüm kullanıcılar için uygundur.

yönetilmeyen tabloveya dış tablo, belirtilen bir LOCATION ile kaydedilmiş bir tablodur. Dış Delta tabloları hala lakehouse verileri olduğundan dış terimi yanıltıcı olabilir. Yönetilmeyen tablolar, diğer Delta okuyucu istemcilerinden tablolara doğrudan erişen kullanıcılar tarafından tercih edilebilir. Tablo semantiğindeki farklılıklara genel bakış için bkz. Tablo nedir?.

Bazı eski iş yükleri yalnızca dosya yolları aracılığıyla Delta Lake verileriyle etkileşime geçebilir ve tabloları hiç kaydetmeyebilir. Bu veriler hala lakehouse verileridir, ancak Unity Kataloğu'na kayıtlı olmadığından daha zor bulunabilir.

Not

Çalışma alanı yöneticiniz Unity Kataloğu'nu kullanmak için veri idarenizi yükseltmemiş olabilir. Unity Kataloğu olmayan bir Databricks lakehouse'un avantajlarından birçoğunu almaya devam edebilirsiniz, ancak bu makalede veya Azure Databricks belgelerinde listelenen tüm işlevler desteklenmez.

Hangi veriler dış olarak kabul edilir?

Databricks lakehouse'ta olmayan tüm veriler dış veriler olarak kabul edilebilir. Bazı dış veri örnekleri şunlardır:

  • Yabancı tablolar, Lakehouse Federation'a kayıtlı.
  • Parquet tarafından yedeklenen Hive meta veri deposundaki tablolar.
  • JSON tarafından yedeklenen Unity Kataloğu'ndaki dış tablolar.
  • Bulut nesne depolama alanında depolanan CSV verileri.
  • Kafka'dan okunan akış verileri.

Azure Databricks, birçok veri kaynağına bağlantı yapılandırmayı destekler. Bkz . Veri kaynaklarına bağlanma.

Unity Kataloğu'nu kullanarak birden çok biçimde ve dış sistemde depolanan verilere erişimi yönetebilir ve tablo tanımlayabilirsiniz ancak Delta Lake, verilerin göl evinde dikkate alınmasına yönelik bir gereksinimdir.

Delta Lake, Azure Databricks'te veri bütünlüğünü ve tutarlılığını korumak için çok önemli olan tüm işlem garantilerini sağlar. Azure Databricks verileriyle ilgili işlem garantileri ve bunların neden önemli olduğu hakkında daha fazla bilgi edinmek istiyorsanız bkz . Azure Databricks'te ACID garantileri nelerdir?.

Azure Databricks kullanıcılarının çoğu lakehouse verilerinin ve dış verilerin birleşimini sorgular. Dış verilerle bağlantı kurmak, verileri göle getiren veri alımı ve ETL işlem hatları için her zaman ilk adımdır. Verileri alma hakkında bilgi için bkz. Azure Databricks Lakehouse'a veri alma.

Tabloları ada göre sorgulama

Databricks, tablo olarak kaydedilen tüm veriler için tablo adını kullanarak sorgulamayı önerir.

Unity Kataloğu kullanıyorsanız, tablolar şu biçimde üç katmanlı bir ad alanı kullanır: <catalog-name>.<schema-name>.<table-name>.

Unity Kataloğu olmadan, tablo tanımlayıcıları <schema-name>.<table-name>biçimini kullanır.

Not

Azure Databricks, SQL söz diziminin büyük bir kısmını Apache Spark'tan devralır ve SCHEMAile arasında DATABASE ayrım yapmaz.

Tablo adına göre sorgulama, tüm Azure Databricks yürütme bağlamlarında ve desteklenen dillerde desteklenir.

SQL

SELECT * FROM catalog_name.schema_name.table_name

Python

spark.read.table("catalog_name.schema_name.table_name")

Unity Kataloğu tanımlayıcı çözümlemesi

Databricks, sorgular veya iş yükleri birden çok şema veya katalogda depolanan veritabanı nesneleriyle etkileşime geçtiğinde tam tanımlayıcıların kullanılmasını önerir.

Aşağıdaki tabloda kısmen nitelenmiş ve nitelenmemiş tanımlayıcıların davranışları özetlenmiştir:

Tanımlayıcı deseni Davranış
catalog_name.schema_name.object_name Tanımlayıcı tarafından belirtilen veritabanı nesnesine başvurur.
schema_name.object_name Geçerli katalogdaki belirtilen schema_name ve object_name ile ilişkili veritabanı nesnesine başvurur.
object_name Geçerli katalog ve şemada belirtilen object_name ile ilişkili veritabanı nesnesine başvurur.

Geçerli katalog ve şema nedir?

Etkileşimli işlem ortamlarında geçerli kataloğunuzu ve şemanızı onaylamak için current_catalog() ve current_schema() kullanın.

Unity Kataloğu ile yapılandırılan tüm çalışma alanlarının çalışma alanı düzeyinde ayarlanmış bir varsayılan kataloğu vardır. Bkz. Varsayılan kataloğu yönetme.

Aşağıdaki tabloda, çalışma alanı varsayılan kataloğunu geçersiz kılabilecek Databricks ürünlerinin yapılandırmaları açıklanmaktadır:

Ürün Konfigürasyon
Genel amaçlı veya iş yükü hesaplama Hesaplama yapılandırılırken Spark yapılandırmasını spark.databricks.sql.initial.catalog.namespace olarak ayarlayın.
DLT İşlem hattı yapılandırması sırasında belirtilen katalog ve şema, tüm işlem hattı mantığı için çalışma alanı varsayılanlarını geçersiz kılar.

Not

Dış sistemlere veya meta veri depolarına bağlanırken varsayılan katalog veya şema JDBC yapılandırmaları tarafından da ayarlanabilir. Beklenmeyen varsayılan davranışlarla karşılaşırsanız Databricks işlem ve tümleşik sistemlerinizi yapılandırmaktan sorumlu yöneticiye başvurun.

Geçerli oturum için geçerli kataloğu veya şemayı belirtmek üzere USE CATALOG veya USE SCHEMA söz dizimini kullanın. Geçerli katalog veya şema, sorgu veya deyim kısmen nitelenmiş veya nitelenmemiş bir girintileyici kullandığında kullanılır.

Beyanat Sonuç
USE CATALOG catalog_name Sağlanan catalog_namekullanarak geçerli kataloğu ayarlar. Geçerli şemayı defaultolarak ayarlar.
USE SCHEMA schema_name Geçerli katalogda sağlanan schema_name kullanarak geçerli şemayı ayarlar.
USE SCHEMA catalog_name.schema_name Sağlanan catalog_name kullanarak geçerli kataloğu ayarlayın ve sağlanan schema_namekullanarak geçerli şemayı ayarlayın.

Not

Tablolar, görünümler, işlevler veya modeller gibi nesnelerle etkileşim kurmak için tam tanımlayıcılar kullanan sorgular ve komutlar geçerli kataloğu veya şemayı değiştirmez ve her zaman belirtilen nesneye başvurur.

Yola göre verileri sorgulama

Dosya yollarını kullanarak yapılandırılmış, yarı yapılandırılmış ve yapılandırılmamış verileri sorgulayabilirsiniz. Azure Databricks'te çoğu dosya bulut nesne depolaması tarafından desteklenir. Bkz. Azure Databricks'te dosyalarla çalışma.

Databricks, Unity Kataloğu'nu kullanarak bulut nesne depolamasına tüm erişimi yapılandırmanızı ve doğrudan sorgulanan nesne depolama konumları için birimler tanımlamanızı önerir. Birimler, dosya yolu için katalog ve şema adlarını kullanarak bulut nesne depolamasındaki konumlara ve dosyalara insan tarafından okunabilir takma adlar sağlar. Unity Kataloğu'nu kullanarak bulut nesne depolamasına ve hizmetlerine bağlanma hakkında bilgi edinin.

Aşağıdaki örneklerde JSON verilerini okumak için Unity Kataloğu birim yollarının nasıl kullanılacağı gösterilmektedir:

SQL

SELECT * FROM json.`/Volumes/catalog_name/schema_name/volume_name/path/to/data`

Python

spark.read.format("json").load("/Volumes/catalog_name/schema_name/volume_name/path/to/data")

Unity Kataloğu birimleri olarak yapılandırılmamış bulut konumları için URI'leri kullanarak verileri doğrudan sorgulayabilirsiniz. URI'lerle verileri sorgulamak için bulut nesne depolamasına erişimi yapılandırmanız gerekir. Bkz. Azure Databricks için bulut nesne depolamasına erişimi yapılandırma.

Aşağıdaki örneklerde Azure Data Lake Storage 2. Nesil, GCS ve S3'teki JSON verilerini sorgulamak için URI'lerin nasıl kullanılacağı gösterilmektedir:

SQL

SELECT * FROM json.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data`;

SELECT * FROM json.`gs://bucket_name/path/to/data`;

SELECT * FROM json.`s3://bucket_name/path/to/data`;

Python

spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data")

spark.read.format("json").load("gs://bucket_name/path/to/data")

spark.read.format("json").load("s3://bucket_name/path/to/data")

SQL ambarlarını kullanarak verileri sorgulama

Azure Databricks, aşağıdaki arabirimlerde işlem için SQL ambarlarını kullanır:

  • SQL düzenleyicisi
  • Databricks SQL sorguları
  • Panolar
  • Eski gösterge panelleri
  • SQL uyarıları

İsteğe bağlı olarak SQL ambarlarını aşağıdaki ürünlerle kullanabilirsiniz:

  • Databricks not defterleri
  • Databricks dosya düzenleyicisi
  • Databricks İşler

SQL ambarlarıyla verileri sorguladığınızda, yalnızca SQL söz dizimlerini kullanabilirsiniz. Diğer programlama dilleri ve API'ler desteklenmez.

Unity Kataloğu için etkinleştirilmiş çalışma alanları için SQL ambarları her zaman Unity Kataloğu'nu kullanarak veri kaynaklarına erişimi yönetir.

SQL ambarlarında çalıştırılacak sorguların çoğu tabloları hedefler. Veri dosyalarını hedefleyen sorgular, depolama konumlarına erişimi yönetmek için Unity Kataloğu birimlerinden yararlanmalıdır.

SQL ambarlarında çalıştırılacak sorgularda doğrudan URI'lerin kullanılması beklenmeyen hatalara neden olabilir.

Tüm amaçlı hesaplama veya işler hesaplamasını kullanarak verileri sorgula

Databricks not defterlerinden, iş akışlarından ve dosya düzenleyicisinden çalıştırdığınız sorguların çoğu Databricks Runtime ile yapılandırılan işlem kümelerinde çalıştırılır. Bu kümeleri etkileşimli çalışacak şekilde yapılandırabilir veya iş akışlarını destekleyen job compute olarak dağıtabilirsiniz. Databricks, etkileşimli olmayan iş yükleri için her zaman iş hesaplaması kullanmanızı önerir.

Etkileşimli ve etkileşimli olmayan iş yükleri

Birçok kullanıcı, dönüştürmeler geliştirme sırasında işlenirken sorgu sonuçlarını görüntülemeyi yararlı bulur. Etkileşimli bir iş yükünü tüm amaçlı işlemden işler işlemine taşırken, sonuçları görüntüleyen sorguları kaldırarak zamandan ve işleme maliyetlerinden tasarruf edebilirsiniz.

Apache Spark gecikmeli kod yürütmeyi kullanır, yani sonuçlar yalnızca gerektiği gibi hesaplanır ve sonuçları zorlamazsanız tek bir sorgu olarak bir veri kaynağına yönelik birden çok dönüştürme veya sorgu iyileştirilebilir. Bu, pandas'ta kullanılan ve sonuçları sonraki yönteme geçirmeden önce hesaplamaların sırayla işlenmesini gerektiren istekli yürütme moduyla karşıttır.

Amacınız temizlenmiş, dönüştürülmüş, toplanmış verileri yeni bir veri kümesi olarak kaydetmekse, çalıştırılacak şekilde zamanlamadan önce kodunuzda sonuçları görüntüleyen sorguları kaldırmanız gerekir.

Küçük işlemler ve küçük veri kümeleri için zaman ve maliyet tasarrufu marjinal olabilir. Yine de büyük işlemlerde, sonuçları el ile incelenemeyecek bir not defterine hesaplamak ve yazdırmak için çok fazla zaman harcanabilir. Kaydedildikten sonra aynı sonuçlar depolanan çıktılardan neredeyse hiçbir maliyet olmaksızın sorgulanabilir.