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 | |
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
mmhem deMMayı temsil eder. Dakika içinmikullanmanı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
ifnullişlevini desteklememesinden kaynaklanır. -
Çözüm
case whenifadesini veyacoalescekomutunu 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.