全部产品
Search
文档中心

MaxCompute:APPROX_DISTINCT

更新时间:Jul 02, 2025

Mengembalikan jumlah perkiraan nilai input yang berbeda dalam kolom tertentu. Fungsi ini merupakan bagian dari MaxCompute V2.0.

Catatan penggunaan

  • MaxCompute V2.0 menyediakan fungsi tambahan. Jika fungsi yang digunakan melibatkan tipe data baru, seperti TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, dan BINARY, Anda harus mengeksekusi pernyataan untuk mengaktifkan edisi tipe data MaxCompute V2.0:

    • Tingkat sesi: Tambahkan set odps.sql.type.system.odps2=true; sebelum pernyataan SQL yang akan dieksekusi, lalu kirim dan eksekusi bersama-sama.

    • Tingkat proyek: Pemilik proyek dapat mengaktifkan edisi tipe data MaxCompute V2.0 untuk proyek sesuai kebutuhan. Pernyataan:

      setproject odps.sql.type.system.odps2=true;

      Konfigurasi akan berlaku setelah 10 hingga 15 menit.

      Untuk informasi lebih lanjut tentang setproject, lihat Operasi Proyek. Untuk detail lebih lanjut tentang tindakan pencegahan saat mengaktifkan edisi tipe data MaxCompute V2.0 di tingkat proyek, lihat Edisi Tipe Data.

  • Jika Anda menggunakan pernyataan SQL yang mencakup beberapa fungsi agregat dan sumber daya proyek tidak memadai, mungkin terjadi kelebihan memori. Kami menyarankan Anda mengoptimalkan pernyataan SQL atau menambah sumber daya komputasi sesuai kebutuhan bisnis.

Sintaksis

approx_distinct(<colname>)

Parameter

colname: Wajib. Menentukan nama kolom dari mana duplikat perlu dihapus.

Nilai kembali

Nilai dengan tipe BIGINT dikembalikan. Fungsi ini memiliki margin kesalahan sebesar 5%.

Data sampel

Berikut adalah data sampel untuk membantu Anda memahami penggunaan fungsi ini. Buat tabel bernama emp dan masukkan data sampel ke dalam tabel. Contoh pernyataan:

create table if not exists emp
   (empno bigint,
    ename string,
    job string,
    mgr bigint,
    hiredate datetime,
    sal bigint,
    comm bigint,
    deptno bigint);
tunnel upload emp.txt emp; -- Ganti emp.txt dengan path sebenarnya (path dan nama) tempat Anda mengunggah file data.

File emp.txt berisi data sampel berikut:

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10

Contoh

  • Contoh 1: Hitung jumlah perkiraan nilai yang berbeda dalam kolom sal. Contoh pernyataan:

    select approx_distinct(sal) from emp;

    Hasil berikut dikembalikan:

    +-------------------+
    | numdistinctvalues |
    +-------------------+
    | 12                |
    +-------------------+
  • Contoh 2: Gunakan fungsi ini dengan GROUP BY untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan hitung jumlah perkiraan nilai yang berbeda dalam kolom sal. Contoh pernyataan:

    select deptno, approx_distinct(sal) from emp group by deptno;

    Hasil berikut dikembalikan:

    +------------+-------------------+
    | deptno     | numdistinctvalues |
    +------------+-------------------+
    | 10         | 3                 |
    | 20         | 4                 |
    | 30         | 5                 |
    +------------+-------------------+

Fungsi terkait

APPROX_DISTINCT adalah fungsi agregat. Untuk informasi lebih lanjut tentang fungsi yang digunakan untuk menghitung nilai rata-rata dari beberapa catatan input dan mengagregasi parameter, lihat Fungsi Agregat.