Referensi tabel sistem riwayat kueri
Penting
Tabel sistem ini berada dalam Pratinjau Umum. Untuk mengakses tabel, skema harus diaktifkan di katalog system
Anda. Untuk informasi selengkapnya, lihat Mengaktifkan skema tabel sistem.
Artikel ini menyertakan informasi tentang tabel sistem riwayat kueri, termasuk kerangka skema tabel.
Penting
Untuk mengakses tabel sistem riwayat kueri, Anda harus mengaktifkan skema query
. Untuk petunjuk tentang mengaktifkan skema sistem, lihat Mengaktifkan skema tabel sistem.
Jalur tabel: Tabel sistem ini terletak di system.query.history
.
Menggunakan tabel riwayat kueri
Tabel riwayat kueri menyertakan rekaman untuk kueri yang dijalankan menggunakan gudang SQL atau komputasi tanpa server untuk buku catatan dan pekerjaan . Tabel menyertakan rekaman seluruh akun dari semua ruang kerja di wilayah yang sama tempat Anda mengakses tabel.
Secara default, hanya admin yang memiliki akses ke tabel sistem. Jika Anda ingin berbagi data tabel dengan pengguna atau grup, Databricks merekomendasikan untuk membuat tampilan dinamis untuk setiap pengguna atau grup. Lihat Membuat tampilan dinamis.
Skema tabel sistem riwayat kueri
Tabel riwayat kueri menggunakan skema berikut:
Nama kolom | Jenis data | Deskripsi | Contoh |
---|---|---|---|
account_id |
string | ID akun. | 11e22ba4-87b9-4cc2 -9770-d10b894b7118 |
workspace_id |
string | ID ruang kerja tempat kueri dijalankan. | 1234567890123456 |
statement_id |
string | ID yang secara unik mengidentifikasi eksekusi pernyataan. Anda dapat menggunakan ID ini untuk menemukan eksekusi pernyataan di antarmuka pengguna Riwayat Kueri. | 7a99b43c-b46c-432b -b0a7-814217701909 |
session_id |
string | ID sesi Spark. | 01234567-cr06-a2mp -t0nd-a14ecfb5a9c2 |
execution_status |
string | Status penghentian pernyataan. Nilai yang mungkin adalah: - FINISHED : Eksekusi berhasil- FAILED : eksekusi gagal dengan alasan kegagalan yang dijelaskan dalam pesan kesalahan yang menyertainya- CANCELED : Eksekusi dibatalkan |
FINISHED |
compute |
struktur | Struktur yang mewakili jenis sumber daya komputasi yang digunakan untuk menjalankan pernyataan dan ID sumber daya jika berlaku. Nilainya type akan berupa WAREHOUSE atau SERVERLESS_COMPUTE . |
{ type: WAREHOUSE, cluster_id: NULL, warehouse_id: ec58ee3772e8d305 } |
executed_by_user_id |
string | ID pengguna yang menjalankan pernyataan. | 2967555311742259 |
executed_by |
string | Alamat email atau nama pengguna pengguna yang menjalankan pernyataan. | example@databricks.com |
statement_text |
string | Teks pernyataan SQL. Jika Anda telah mengonfigurasi kunci yang dikelola pelanggan, statement_text kosong. Karena keterbatasan penyimpanan, nilai teks pernyataan yang lebih panjang dikompresi. Bahkan dengan kompresi, Anda mungkin mencapai batas karakter. |
SELECT 1 |
statement_type |
string | Jenis pernyataan. Misalnya: ALTER , COPY , dan INSERT . |
SELECT |
error_message |
string | Pesan yang menjelaskan kondisi kesalahan. Jika Anda telah mengonfigurasi kunci yang dikelola pelanggan, error_message kosong. |
[INSUFFICIENT_PERMISSIONS] Insufficient privileges: User does not have permission SELECT on table 'default.nyctaxi_trips'. |
client_application |
string | Aplikasi klien yang menjalankan pernyataan. Misalnya: Editor SQL Databricks, Tableau, dan Power BI. Bidang ini berasal dari informasi yang disediakan oleh aplikasi klien. Meskipun nilai diharapkan tetap statis dari waktu ke waktu, ini tidak dapat dijamin. | Databricks SQL Editor |
client_driver |
string | Konektor yang digunakan untuk menyambungkan ke Databricks untuk menjalankan pernyataan. Misalnya: Driver SQL Databricks untuk Go, Driver ODBC Databricks, Driver Databricks JDBC. | Databricks JDBC Driver |
total_duration_ms |
bigint | Total waktu eksekusi pernyataan dalam milidetik (tidak termasuk waktu pengambilan hasil). | 1 |
waiting_for_compute_duration_ms |
bigint | Waktu yang dihabiskan untuk menunggu sumber daya komputasi disediakan dalam milidetik. | 1 |
waiting_at_capacity_duration_ms |
bigint | Waktu yang dihabiskan untuk menunggu dalam antrean untuk kapasitas komputasi yang tersedia dalam milidetik. | 1 |
execution_duration_ms |
bigint | Waktu yang dihabiskan untuk menjalankan pernyataan dalam milidetik. | 1 |
compilation_duration_ms |
bigint | Waktu yang dihabiskan untuk memuat metadata dan mengoptimalkan pernyataan dalam milidetik. | 1 |
total_task_duration_ms |
bigint | Jumlah semua durasi tugas dalam milidetik. Kali ini mewakili waktu gabungan yang diperlukan untuk menjalankan kueri di semua inti semua simpul. Ini bisa jauh lebih lama daripada durasi jam dinding jika beberapa tugas dijalankan secara paralel. Ini bisa lebih pendek dari durasi jam dinding jika tugas menunggu simpul yang tersedia. | 1 |
result_fetch_duration_ms |
bigint | Waktu yang dihabiskan, dalam milidetik, mengambil hasil pernyataan setelah eksekusi selesai. | 1 |
start_time |
rentang waktu | Waktu ketika Databricks menerima permintaan. Informasi zona waktu dicatat di akhir nilai dengan +00:00 mewakili UTC. |
2022-12-05T00:00:00.000+0000 |
end_time |
rentang waktu | Waktu eksekusi pernyataan berakhir, tidak termasuk waktu pengambilan hasil. Informasi zona waktu dicatat di akhir nilai dengan +00:00 mewakili UTC. |
2022-12-05T00:00:00.000+00:00 |
update_time |
rentang waktu | Waktu terakhir kali pernyataan menerima pembaruan kemajuan. Informasi zona waktu dicatat di akhir nilai dengan +00:00 mewakili UTC. |
2022-12-05T00:00:00.000+00:00 |
read_partitions |
bigint | Jumlah partisi yang dibaca setelah pemangkasan. | 1 |
pruned_files |
bigint | Jumlah file yang diprajakan. | 1 |
read_files |
bigint | Jumlah file yang dibaca setelah pemangkasan. | 1 |
read_rows |
bigint | Jumlah total baris yang dibaca oleh pernyataan. | 1 |
produced_rows |
bigint | Jumlah total baris yang dikembalikan oleh pernyataan. | 1 |
read_bytes |
bigint | Ukuran total data yang dibaca oleh pernyataan dalam byte. | 1 |
read_io_cache_percent |
int | Persentase byte data persisten yang dibaca dari cache IO. | 50 |
from_result_cache |
Boolean |
TRUE menunjukkan bahwa hasil pernyataan diambil dari cache. |
TRUE |
spilled_local_bytes |
bigint | Ukuran data, dalam byte, untuk sementara ditulis ke disk saat menjalankan pernyataan. | 1 |
written_bytes |
bigint | Ukuran dalam byte data persisten yang ditulis ke penyimpanan objek cloud. | 1 |
shuffle_read_bytes |
bigint | Jumlah total data dalam byte yang dikirim melalui jaringan. | 1 |
query_source |
struktur | Struktur yang berisi pasangan kunci-nilai yang mewakili satu atau beberapa entitas Databricks yang terlibat dalam eksekusi pernyataan ini, seperti pekerjaan, notebook, atau dasbor. Bidang ini hanya merekam entitas Databricks. | { alert_id: null, sql_query_id: null, dashboard_id: 887406461287882, notebook_id: null, job_info: null, legacy_dashboard_id: null, genie_space_id: null } |
executed_as |
string | Nama pengguna atau perwakilan layanan yang hak istimewanya digunakan untuk menjalankan pernyataan. | example@databricks.com |
executed_as_user_id |
string | ID pengguna atau perwakilan layanan yang hak istimewanya digunakan untuk menjalankan pernyataan. | 2967555311742259 |
Menampilkan profil kueri untuk rekaman
Untuk menavigasi ke profil kueri berdasarkan rekaman dalam tabel riwayat kueri, lakukan hal berikut:
- Identifikasi catatan yang menarik, lalu salin rekaman
statement_id
. - Referensikan rekaman
workspace_id
untuk memastikan Anda masuk ke ruang kerja yang sama dengan rekaman. - Klik
Riwayat Kueri di bilah samping ruang kerja.
-
Di bidang ID Pernyataan, tempelkan
statement_id
pada rekaman. - Klik nama kueri. Gambaran umum metrik kueri muncul.
- Klik Lihat profil kueri.
Mewujudkan riwayat kueri dari metastore Anda
Kode berikut dapat digunakan untuk membuat tugas yang dijalankan setiap jam, setiap hari, atau setiap minggu untuk mematerialisasikan riwayat kueri dari sebuah metastore. Sesuaikan variabel HISTORY_TABLE_PATH
dan LOOKUP_PERIOD_DAYS
.
from delta.tables import *
from pyspark.sql.functions import *
from pyspark.sql.types import *
HISTORY_TABLE_PATH = "jacek.default.history"
# Adjust the lookup period according to your job schedule
LOOKUP_PERIOD_DAYS = 1
def table_exists(table_name):
try:
spark.sql(f"describe table {table_name}")
return True
except Exception:
return False
def save_as_table(table_path, df, schema, pk_columns):
deltaTable = (
DeltaTable.createIfNotExists(spark)
.tableName(table_path)
.addColumns(schema)
.execute()
)
merge_statement = " AND ".join([f"logs.{col}=newLogs.{col}" for col in pk_columns])
result = (
deltaTable.alias("logs")
.merge(
df.alias("newLogs"),
f"{merge_statement}",
)
.whenNotMatchedInsertAll()
.whenMatchedUpdateAll()
.execute()
)
result.show()
def main():
df = spark.read.table("system.query.history")
if table_exists(HISTORY_TABLE_PATH):
df = df.filter(f"update_time >= CURRENT_DATE() - INTERVAL {LOOKUP_PERIOD_DAYS} days")
else:
print(f"Table {HISTORY_TABLE_PATH} does not exist. Proceeding to copy the whole source table.")
save_as_table(
HISTORY_TABLE_PATH,
df,
df.schema,
["workspace_id", "statement_id"]
)
main()