Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Yerleşik işlevler hakkında sık sorulan sorular

Son Güncelleme:Oct 04, 2026

Bu konuda, MaxCompute yerleşik işlevleriyle ilgili sık sorulan sorular (SSS) açıklanmaktadır.

Kategori

Sık Sorulan Sorular

Tarih işlevleri

Matematiksel işlevler

DOUBLE veri türünü yuvarlamak için ROUND işlevini kullandığımda neden sapma oluşur?

Pencere işlevleri

MaxCompute'te otomatik artan bir sıra ayarlamak için hangi işlevi kullanabilirim?

Toplama işlevleri

Aynı alandaki değerleri nasıl birleştiririm?

Dize işlevleri

Karmaşık tür işlevleri

Diğer işlevler

Örtük dönüşüm

MaxCompute yerleşik işlevini kullandığımda neden örtük tür dönüşümü hatası oluşur?

MaxCompute 2010/1/3 biçimini 2010-01-03 olarak dönüştürmeyi destekliyor mu?

Bir tarih 2010/01/03 biçimindeyse bunu dönüştürmek için to_char(to_date('2010/01/03', 'yyyy/mm/dd'), 'yyyy-mm-dd') işlevini kullanabilirsiniz. Daha fazla bilgi için bkz. TO_DATE ve TO_CHAR.

Bir tarih 2010/1/3 biçimindeyse tarih biçimini dönüştürmek için Kullanıcı Tanımlı İşlev (UDF) yazmanız gerekir. UDF yazma hakkında daha fazla bilgi için bkz. MaxCompute UDF'lerine Genel Bakış.

UNIX zaman damgasını bir tarih değerine nasıl dönüştürürüm?

Sayısal bir UNIX zaman damgasını bir tarih değerine dönüştürmek için FROM_UNIXTIME işlevini kullanabilirsiniz. Daha fazla bilgi için bkz. FROM_UNIXTIME.

Geçerli sistem saatini nasıl alırım?

Geçerli sistem saatini almak için GETDATE işlevini kullanabilirsiniz. Daha fazla bilgi için bkz. GETDATE.

YEAR, QUARTER, MONTH veya DAY tarih işlevlerini kullandığımda neden "cannot be resolved" hatası oluşur?

  • Belirtiler

    YEAR, QUARTER, MONTH veya DAY tarih işlevlerini kullandığınızda aşağıdaki hata döndürülür.

    FAILED: ODPS-0130071:[1,8] Semantic analysis exception - function or view 'year' cannot be resolved
  • Neden

    YEAR, QUARTER, MONTH ve DAY, MaxCompute V2.0'da genişletme işlevleridir. Bunları kullanmak için MaxCompute V2.0 veri türlerini etkinleştirmeniz gerekir.

  • Çözüm

    MaxCompute V2.0 için yeni veri türlerini etkinleştirmek üzere SQL ifadenizin önüne set odps.sql.type.system.odps2 = true; ifadesini ekleyin.

TO_DATE işlevini çalıştırdığımda neden "doesn't have minute part" hatası oluşur?

  • Sorun

    to_date('2016-07-18 18:18:18', 'yyyy-MM-dd HH:mm:ss') SQL ifadesini çalıştırdığınızda aşağıdaki hata döndürülür.

    FAILED: ODPS-0121095:Invalid arguments - format string has second part, but doesn’t have minute part : yyyy-MM-dd HH:mm:ss                   
  • Neden

    TO_DATE işlevindeki ikinci parametrenin biçimi yanlışdır. Hem mm hem de MM ayı temsil eder. Dakika için mi kullanmanız gerekir.

  • Çözüm

    SQL ifadesini to_date('2016-07-18 18:18:18', 'yyyy-MM-dd HH:mi:ss') olarak değiştirin.

DOUBLE veri türünü yuvarlamak için ROUND işlevini kullandığımda neden sapma oluşur?

DOUBLE veri türünü yuvarlamak için round işlevini kullandığınızda 4.515 değeri 4.51'e yuvarlanır. Aşağıda örnek bir SQL ifadesi verilmiştir.

select round(4.515, 2),round(125.315, 2);                   

DOUBLE türü, 8 baytlık çift hassasiyetli kayan noktalı bir sayıdır ve hassasiyet hataları içerebilir. 4.515 değerinin DOUBLE gösterimi 4.514999999... şeklindedir. Bu nedenle değer aşağıya doğru 4.51'e yuvarlanır.

MaxCompute'te otomatik artan bir sıra ayarlamak için hangi işlevi kullanabilirim?

Otomatik artan bir sıra ayarlamak için ROW_NUMBER işlevini kullanabilirsiniz. Daha fazla bilgi için bkz. ROW_NUMBER.

Aynı alandaki değerleri nasıl birleştiririm?

Aynı alandaki değerleri birleştirmek için WM_CONCAT işlevini kullanabilirsiniz. Daha fazla bilgi için bkz. WM_CONCAT.

MaxCompute MD5 işlevini destekliyor mu?

Evet, desteklemektedir. Daha fazla bilgi için bkz. MD5.

Sabit uzunluklu bir dizeyi baştaki sıfırlarla nasıl doldururum?

LPAD işlevini kullanabilirsiniz. Daha fazla bilgi için bkz. LPAD.

MySQL'deki SUBSTRING_INDEX işlevi MaxCompute'te destekleniyor mu?

Evet, desteklenmektedir. Daha fazla bilgi için bkz. SUBSTRING_INDEX.

REGEXP_COUNT işlevinin pattern parametresi gömülü sorgu ifadelerini destekliyor mu?

Hayır, desteklememektedir. Kullanım bilgileri için bkz. REGEXP_COUNT.

MaxCompute Oracle'ın to_char(data, FM9999.00) kullanımını destekliyor mu?

Hayır, desteklememektedir. Yalnızca bir sayının görüntüleme biçimini ayarlamanız gerekiyorsa FORMAT_NUMBER işlevini kullanabilirsiniz. Aşağıda örnek bir komut verilmiştir.

-- Returns 12,332.123.
select format_number(12332.123456, '#,###,###,###.###');

IFNULL işlevini kullandığımda neden "Invalid function" hatası oluşur?

  • Sorun

    Aşağıdaki SQL ifadesi IFNULL işlevini kullanmaktadır.

    select a.id as id > , ifnull(concat('phs\xxx', a.insy, '\xxxb\xxx', ifnull()))

    Aşağıdaki hata döndürülür.

    Semantic analysis exception - Invalid function : line 1:41 'ifnull'
  • Neden

    Bu hata, MaxCompute'in ifnull işlevini desteklememesinden kaynaklanır.

  • Çözüm

    case when ifadesini veya coalesce komutunu kullanabilirsiniz. Daha fazla bilgi için bkz. CASE WHEN ifadesi veya COALESCE.

Belirli bir koşulu karşılayan tüm alanları tek bir JSON nesnesinde nasıl birleştiririm?

MaxCompute SQL'de ölçütlerinizi karşılayan verileri sorgulamak için like gibi filtre koşullarını kullanabilirsiniz. Ardından verileri MAP veya ARRAY karmaşık türlerinde yapılandırmak için ARRAY veya MAP işlevini kullanın. Son olarak toplama işlemi için TO_JSON işlevini kullanın.

Bir JSON dizesindeki her anahtarı ayrı bir alan olarak nasıl ele alırım?

Alanları almak için GET_JSON_OBJECT işlevini kullanabilirsiniz.

Bir JSON dizesini ARRAY biçimine nasıl dönüştürürüm?

Dönüşümü gerçekleştirmek için FROM_JSON işlevini kullanabilirsiniz. Örneğin, select from_json(<col_name>, "array<bigint>");.

MaxCompute'teki hangi işlev MySQL'deki IFNULL işlevine karşılık gelir?

MaxCompute'teki NVL işlevi, MySQL'deki IFNULL işlevine karşılık gelir. MaxCompute, Hive, MySQL ve Oracle arasındaki yerleşik işlevlerin karşılaştırması için bkz. Hive, MySQL ve Oracle'daki yerleşik işlevlerin karşılaştırılması.

Tek bir satırı birden çok satıra nasıl dönüştürürüm?

Tek bir veri satırını birden çok satıra dönüştürmek için TRANS_COLS işlevini kullanabilirsiniz.

COALESCE işlevini kullandığımda neden "Expression not in GROUP BY key" hatası oluşur?

  • Sorun

    Birden fazla ifadeyle COALESCE işlevini kullandığınızda aşağıdaki hata döndürülür.

    FAILED: ODPS-0130071:Semantic analysis exception - Expression not in GROUP BY key : line 8:9 "$.table"                    

    Aşağıdaki SQL ifadesi hataya neden olur.

    select  
    md5(concat(aid,bid)) as id
    ,aid
    , bid
    , sum(amountdue) as amountdue
    , coalesce(
    sum(regexp_count(get_json_object(extended_x, '$.table.tableParties'), '{')),
    decode(get_json_object(extended_x, '$.table'), null, 0, 1)
    ) as tableparty
    , decode(sum(headcount),null,0,sum(headcount) ) as headcount
    , 'a' as pt
    from e_orders
    where pt='20170425'
    group by aid, bid;
  • Neden

    GROUP BY yan tümcesinde bir gruplama alanı eksiktir.

  • Çözüm

    Aşağıdaki ifadenin dönüş değeri bir alandır. Bu nedenle tüm ifadeyi GROUP BY yan tümcesine eklemeniz gerekir.

    coalesce(
    sum(regexp_count(get_json_object(extended_x, '$.table.tableParties'), '{')),
    decode(get_json_object(extended_x, '$.table'), null, 0, 1)
    ) as tableparty
    , decode(sum(headcount),null,0,sum(headcount) ) as headcount

MaxCompute yerleşik işlevini kullandığımda neden örtük tür dönüşümü hatası oluşur?

odps.sql.type.system.odps2=true ayarını yaparak bir proje için MaxCompute V2.0'ın yeni veri türlerini etkinleştirdiğinizde aşağıdaki örtük tür dönüşümleri devre dışı bırakılır. Bu durum hassasiyet kaybına veya hatalara neden olabilir.

  • STRING->BIGINT

  • STRING->DATETIME

  • DOUBLE->BIGINT

  • DECIMAL->DOUBLE

  • DECIMAL->BIGINT

Bu sorunu çözmek için zorunlu bir dönüşüm gerçekleştirmek üzere CAST işlevini kullanabilir veya odps.sql.type.system.odps2=false ayarını yaparak yeni veri türlerini devre dışı bırakabilirsiniz.