Tüm Ürünler
Search
Belge Merkezi

MaxCompute:ODPS SQL görevi geliştirme

Son Güncelleme:Oct 12, 2026

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 -- açıklama içeriği biçimindeki tek satırlık açıklamalar desteklenir. / açıklama içeriği / biçimindeki çok satırlı açıklamalar desteklenmez.

Daha fazla bilgi için bkz. MaxCompute SQL açıklamaları.

Açıklamalarla ilgili aşağıdaki sınırlamalar da geçerlidir:

  • SET veya USE gibi anahtar sözcük deyimlerinin ardından açıklama ekleyemezsiniz.

  • Bir açıklamada noktalı virgül (;) kullanamazsınız.

  • Noktalı virgül (;) ile sonlanan bir deyimin ardından açıklama ekleyemezsiniz.

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 USE deyimini kullanırsanız, SQL kodundaki SET deyimleri etkili olmaz.

-- Not recommended:
    USE xc_dpe_e2;
    SELECT * FROM ads_user_info_1d WHERE dt = '${bizdate}' LIMIT 100;

    -- Recommended:
    SELECT * FROM xc_dpe_e2.ads_user_info_1d WHERE dt = '${bizdate}' LIMIT 100;

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:

  • Sorgu sonucu 10.000 satırı aşarsa en fazla 10.000 satır görüntülenir.

  • Sorgu sonucunun boyutu 10 MB değerini aşarsa Result is too large, exceed the limit size: 10MB hata iletisi döndürülür.

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.

Not
  • 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 TABLE deyimini 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 INTO veya INSERT OVERWRITE deyimini 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') ;
    Önemli

    Kazara veri çoğaltmasına neden olabileceğinden veri eklemek için INSERT INTO deyiminin kullanılmasından kaçının. Bunun yerine INSERT OVERWRITE deyiminin 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 SELECT deyimini 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;
    Not

    Varsayı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 dateadd iş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.

    Not

    Uluslararası 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.