MaxCompute SQL görevi, gerçek zamanlı sonuçların gerekli olmadığı durumlarda büyük ölçekli verilerin (TB düzeyinde) dağıtık işlenmesi için SQL benzeri bir söz dizimi kullanır. Bu konuda, DataWorks'te bir SQL görevinin nasıl geliştirileceği açıklanmakta ve önemli kullanım notları sunulmaktadır.
Giriş
ODPS SQL, MaxCompute içindeki verileri işlemek ve sorgulamak için kullanılır. SELECT, INSERT, UPDATE ve DELETE gibi yaygın SQL işlemlerinin yanı sıra MaxCompute'e özel söz dizimini ve işlevleri destekler. ODPS SQL ile, karmaşık veri işleme mantığı yazmadan SQL benzeri deyimler kullanarak verileri sorgulayabilir ve işleyebilirsiniz. SQL söz dizimi hakkında daha fazla bilgi için bkz. SQL Genel Bakış.
Sınırlamalar
DataWorks'teki ODPS SQL düğümleri aşağıdaki sınırlamalara sahiptir:
Kategori | Açıklama |
Açıklama satırlarının kullanımı | Yalnızca Daha fazla bilgi için bkz. MaxCompute SQL açıklamaları. Açıklamalarla ilgili aşağıdaki sınırlamalar da geçerlidir:
|
SQL gönderimi | SET veya USE deyimlerini tek başına kullanamazsınız. Bunları diğer SQL deyimleriyle birlikte çalıştırmanız gerekir. Başka bir MaxCompute projesine geçmek için |
SQL geliştirme | SQL kodunun boyutu 128 KB değerini aşamaz ve SQL deyimi sayısı 200 değerini geçemez. |
Sorgu sonucu | Yalnızca SELECT veya WITH ile başlayan SQL deyimleri biçimlendirilmiş bir sonuç kümesi döndürebilir. Sorgu sonucu aşağıdaki sınırlamalara tabidir:
Not Bu sınırlamalarla karşılaşırsanız, sorgu sonucunu yerel olarak görüntülemek üzere aşağıdaki yöntemlerden birini kullanarak indirebilirsiniz:
|
Kullanım notları
ODPS SQL görevini çalıştırmak için kullanılan hesabın ilgili MaxCompute projesi üzerinde gerekli izinlere sahip olduğundan emin olun. Daha fazla bilgi için bkz. MaxCompute Üzerinde DataWorks İzin Kontrolü ve MaxCompute izinleri.
MaxCompute SQL görevlerinin çalışması için kota kaynakları gerekir. Bir görev uzun süre çalışıyorsa MaxCompute konsoluna giderek kota tüketimini kontrol edin ve görevin çalışması için yeterli kaynağın bulunduğundan emin olun. Daha fazla bilgi için bkz. Hesaplama Kaynakları - Kota Yönetimi.
Bir ODPS SQL düğümünde görev geliştirirken OSS adresi gibi özel parametreler çift tırnak içine ("") alınmalıdır. Aksi takdirde ayrıştırma hatası oluşur ve görev başarısız olur.
Sunucu elektrik kesintisi veya birincil/ikincil geçiş gibi bazı uç durumlarda DataWorks ilgili MaxCompute görevlerini tamamen sonlandıramayabilir. Bu durumda, ilgili MaxCompute projesine giderek işi sonlandırın.
-
Anahtar sözcük deyimlerinin (SET ve USE) yürütülme sırası DataWorks ortamına göre değişir.
DataStudio'da: Tüm anahtar sözcük deyimleri (SET ve USE) birleştirilir ve diğer SQL deyimlerinden önce çalıştırılır.
Zamanlama ortamında: Deyimler yazıldıkları sırayla çalıştırılır.
Bir düğümde aşağıdaki kodun tanımlandığını varsayalım.
SET a=b; CREATE TABLE name1(id string); SET c=d; CREATE TABLE name2(id string);Aşağıdaki tabloda farklı ortamlardaki yürütme sırası açıklanmaktadır.
Çalıştırılan SQL
DataStudio
Zamanlama ortamı
İlk SQL deyimi
SET a=b; SET c=d; CREATE TABLE name1(id string);SET a=b; CREATE TABLE name1(id string);İkinci SQL deyimi
SET a=b; SET c=d; CREATE TABLE name2(id string);SET c=d; CREATE TABLE name2(id string);
Kod düzenleme: Basit örnekler
SQL komutları
MaxCompute SQL komutları standart SQL'e benzer bir söz dizimi kullanır ve DDL, DML ve DQL deyimlerinin yanı sıra belirli MaxCompute söz dizimini destekler. Her SQL komutunun söz dizimi gereksinimleri ve kullanım örnekleri hakkında daha fazla bilgi için bkz. SQL genel bakış. Aşağıdaki basit örnekte SQL komutlarının nasıl geliştirilip çalıştırılacağı gösterilmektedir.
MaxCompute 2.0 genişletilmiş işlevleriyle yeni veri türlerini kullanırken, yeni veri türlerinin kullanılabilmesi için SQL deyiminin önüne
SET odps.sql.type.system.odps2=true;eklemeniz ve bunları birlikte göndermeniz gerekir. Daha fazla bilgi için bkz. 2.0 Veri Türleri Sürümü.DataWorks, zamanlanmış senaryolarda dinamik parametre aktarımını etkinleştirmek için zamanlama parametreleri sağlar. ODPS SQL düğüm kodunuzda ${değişken_adı} biçimini kullanarak değişkenler tanımlayabilir ve Properties > Parameter bölümünde değerler atayabilirsiniz. Zamanlama parametreleri için desteklenen biçimler hakkında daha fazla bilgi için bkz. Zamanlama parametreleri için desteklenen biçimler.
-
Tablo oluşturma
Bölümlenmemiş tablo, bölümlenmiş tablo, harici tablo veya kümelenmiş tablo oluşturmak için
CREATE TABLEdeyimini kullanabilirsiniz. Daha fazla bilgi için bkz. CREATE TABLE. Örnek SQL deyimi:-- Create a partitioned table named test1. CREATE TABLE if NOT EXISTS students ( id BIGINT, name STRING, age BIGINT, birth DATE) partitioned BY (gender STRING); -
Veri ekleme
Bir hedef tabloya veri eklemek veya güncellemek için
INSERT INTOveyaINSERT OVERWRITEdeyimini kullanabilirsiniz. Daha fazla bilgi için bkz. Veri ekleme veya üzerine yazma (INSERT INTO | INSERT OVERWRITE). Örnek SQL deyimleri:-- Insert data. INSERT INTO students PARTITION(gender='boy') VALUES (1,'John',15,DATE '2008-05-15') ; INSERT INTO students PARTITION(gender='boy') VALUES (2,'Jack',17,DATE '2006-07-20') ; INSERT INTO students PARTITION(gender='girl') VALUES (3,'Alice',20,DATE '2003-04-20') ; INSERT INTO students PARTITION(gender='girl') VALUES (4,'Lily',21,DATE '2002-01-08') ; INSERT INTO students PARTITION(gender='boy') VALUES (5,'Bob',17,DATE '2006-09-12') ;ÖnemliKazara veri çoğaltmasına neden olabileceğinden veri eklemek için
INSERT INTOdeyiminin kullanılmasından kaçının. Bunun yerineINSERT OVERWRITEdeyiminin kullanılması önerilir. Daha fazla bilgi için bkz. Veri ekleme veya üzerine yazma. -
Veri sorgulama
İç içe geçmiş sorgular, gruplandırılmış sorgular ve sıralama gibi işlemleri gerçekleştirmek için
SELECTdeyimini kullanabilirsiniz. Daha fazla bilgi için bkz. SELECT söz dizimi. Örnek SQL deyimleri:-- (Optional) Enable full table scan at the project level. This operation requires high-level permissions. -- SETPROJECT odps.sql.allow.fullscan=true; -- Enable full table scan at the session level. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; -- Query the information about all boys and sort the results by ID in ascending order. SELECT * FROM students WHERE gender='boy' ORDER BY id;NotVarsayılan olarak bir RAM kullanıcısının üretim tabloları üzerinde sorgu izni yoktur. Üretim tablolarını sorgulamak için Security Center'da istek gönderin. MaxCompute veri izin ön ayarları ve DataWorks'te erişim kontrolü hakkında bilgi için bkz. MaxCompute veri izin kontrolü ayrıntıları. MaxCompute'te komutlar kullanarak izinlerin nasıl verileceği hakkında bilgi için bkz. Komutları kullanarak kullanıcı izinlerini yönetme.
SQL işlevleri
MaxCompute, veri geliştirme ve analizi için yerleşik işlevler ve kullanıcı tanımlı işlevler (UDF'ler) destekler. Yerleşik işlevler hakkında daha fazla bilgi için bkz. Yerleşik işlevlere genel bakış. UDF'ler hakkında daha fazla bilgi için bkz. MaxCompute UDF genel bakış. Aşağıdaki örnekte SQL işlevlerinin nasıl kullanılacağı gösterilmektedir.
-
Yerleşik işlevler: Bu işlevler MaxCompute'te önceden yüklüdür ve doğrudan çağrılabilir. Önceki örneğe dayanarak, birth sütununu belirtilen birim ve aralığa göre değiştirmek için
dateaddişlevini kullanabilirsiniz. Örnek komut:-- Enable full table scan at the session level. This setting is valid only for the current session. SET odps.sql.allow.fullscan=true; SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students; Kullanıcı tanımlı işlevler (UDF'ler): Bir UDF kullanmak için işlev kodunu yazmanız, bunu kaynak olarak yüklemeniz ve işlevi kaydetmeniz gerekir. Daha fazla bilgi için bkz. UDF oluşturma ve kullanma.
Yürütme ve sonuçlar
-
Çalıştırma sonuçları doğrudan elektronik tablo biçiminde görünür. DataWorks'te işlemler yapabilir, sonuçları bir elektronik tabloda açabilir veya içeriği kopyalayıp yerel bir Excel dosyasına yapıştırabilirsiniz. Daha fazla bilgi için bkz. Görevlerde hata ayıklama.
NotUluslararası Standardizasyon Örgütü (ISO) tarafından yayınlanan Çin saat dilimi bilgilerine yapılan bir değişiklik nedeniyle, DataWorks'te ilgili SQL sorgularını yürüttüğünüzde tarih görüntülemede zaman uyumsuzluğu ortaya çıkabilir. 1900 ile 1928 arasındaki tarihler için zaman farkı 5 dakika 52 saniye, 1900 öncesi tarihler için ise 9 saniyedir.
Çalışma Zamanı Günlüğü: Logview'u görüntülemek için Operational Logs sekmesini tıklayın. Daha fazla bilgi için bkz. Logview V2.0 kullanarak iş bilgilerini görüntüleme.
-
Döndürülen sonuçlar:
-
Tüm erkeklerin bilgilerini sorgulayın ve sonuçları ID'ye göre artan sırada sıralayın.
+------------+------------+------------+------------+------------+ | id | name | age | birth | gender | +------------+------------+------------+------------+------------+ | 1 | John | 15 | 2008-05-15 | boy | | 2 | Jack | 17 | 2006-07-20 | boy | | 5 | Bob | 17 | 2006-09-12 | boy | +------------+------------+------------+------------+------------+ -
birth sütununu belirtilen birim ve aralığa göre değiştirin.
+------------+------------+------------+------------+---------------+ | id | name | age | birth | birth_dateadd | +------------+------------+------------+------------+---------------+ | 4 | Lily | 21 | 2002-01-08 | 2002-02-08 | | 3 | Alice | 20 | 2003-04-20 | 2003-05-20 | | 2 | Jack | 17 | 2006-07-20 | 2006-08-20 | | 1 | John | 15 | 2008-05-15 | 2008-06-15 | | 5 | Bob | 17 | 2006-09-12 | 2006-10-12 | +------------+------------+------------+------------+---------------+
Sorgu sonucu sayfasında sonuçları belirli bir alana göre sıralayabilir ve sonuçları indirebilirsiniz. Daha fazla bilgi için bkz. Sorgu sonuçlarını işleme.
-
Kod düzenleme: Gelişmiş örnekler
ODPS SQL görevleri için daha gelişmiş örnekler aşağıdaki konularda bulunabilir:
SSS
-
S: ODPS SQL görevim neden uzun süre bekleme durumunda kalıyor?
C: ODPS SQL görevlerinin çalışması için kota kaynakları gerekir. Göreviniz uzun süre bekleme durumunda kalıyorsa MaxCompute konsoluna giderek kota tüketimini kontrol edin ve görevin çalışması için yeterli kaynağın bulunduğundan emin olun. Daha fazla bilgi için bkz. Hesaplama Kaynakları - Kota Yönetimi.
-
S: Bir ODPS SQL görevi çalıştırırken neden "You have No privilege 'odps:xxxx' on xxxx" hata iletisi görünüyor?
C: ODPS SQL görevini çalıştırmak için kullanılan hesabın ilgili MaxCompute projesi üzerinde gerekli izinlere sahip olması gerekir. Daha fazla bilgi için bkz. MaxCompute izinleri.