Data Engineer
ClickHouse'da ma'lumotlarni o'chirishning qanday usullari mavjud?
Bizga juda tez ishlash imkonini beradigan pipeline motoriga ehtiyojimiz bor — bu mexanizm, kontraktlar va parametrlarni kirish sifatida taqdim etish orqali juda tez oqimlarni yaratishga imkon beradi. Buni yuqori darajada qanday amalga oshirasiz?
Hive'da bo'linish qanday ishlaydi va u fayl tizimida qanday jismoniy tarzda tasvirlangan?
O'zingiz haqida gapirib bering — ish tajribasi, texnologiyalar steki
HDFSda ma'lumotlarni bloklarga bo'lishning maqsadi nima?
Ma'lumotlar bazasida o'lik satrlar nima?
Airflow operatorlaridan qanday foydalaning? Airflow orqali dbt bilan qanday muloqot qildingiz?
So'rov bo'yicha, ma'lumotlar bilan nima bo'layotganini ko'rishimiz mumkin, qaysi turdagi qo'shilishlar — qaysi turdagi qo'shilishlarni u yerda ko'rishimiz mumkin?
-- Asl original stretch jadvali -- Id bo'yicha NULL bo'lmagan oldingi qiymat bilan NULL'larni to'ldirish kerak - pastga kengaytirish id | ttime | val ---|-------|----- 1 | 07:30 | NULL 1 | 09:21 | 10 1 | 13:53 | NULL 1 | 16:12 | NULL 2 | 09:42 | 133 2 | 15:20 | NULL 2 | 21:33 | NULL 3 | 08:01 | NULL 3 | 11:41 | 8 3 | 14:23 | NULL 3 | 16:17 | NULL 3 | 19:54 | 2 4 | 13:10 | 312 4 | 14:42 | NULL 4 | 16:31 | 7 4 | 17:44 | NULL id | ttime | val ---|-------|----- 1 | 07:30 | NULL 1 | 09:21 | 10 1 | 13:53 | 10 1 | 16:12 | 10 2 | 09:42 | 133 2 | 15:20 | 133 2 | 21:33 | 133 3 | 08:01 | NULL 3 | 11:41 | 8 3 | 14:23 | 8 3 | 16:17 | 8 3 | 19:54 | 2 4 | 13:10 | 312 4 | 14:42 | 312 4 | 16:31 | 7 4 | 17:44 | 7 -- SQL so'rov yordamida kerakli jadvalni olish SELECT id, ttime, COALESCE(val, LAST_VALUE(val) OVER(PARTITION BY id ORDER BY ttime)) as val FROM stretch
Iceberg — bu S3 ni bazaga aylantirish imkonini beradigan motor, hatto ACID ga ham rioya qiladi. Uning kamchiligi nima?
Greenplumda ACID bajariladimi?
Reklam kampaniyalari bo'yicha foydalanuvchilar faoliyatini tahlil qilish Kompaniya reklama kampaniyalari bilan bog'liq voqealarni hisobga oladi. Ikkita jadval taqdim etilgan: • campaigns — reklama kampaniyalari ro'yxati, ularning identifikatorlari va nomlari bilan; • events — kampaniyalarga oid foydalanuvchi voqealari, voqea turi (masalan, 'click' (bosish)) va vaqt bilan. Har bir kampaniya uchun quyidagi ko'rsatkichlar bilan hisobot tayyorlash kerak: • Umumiy voqealar soni. • Voqealarni amalga oshirgan yagona foydalanuvchilar soni. • Kampaniya bo'yicha birinchi va oxirgi voqea vaqti. • Kampaniya reytingi, umumiy voqealar soniga ko'ra kamayish tartibida. Reyting har bir satrga ma'lumotlar asosida berilgan raqamdir. Agar ikki yoki undan ortiq satrda bir xil qiymat bo'lsa, ular bir xil reyting oladi, ammo keyingi reyting o'tkazib yuboriladi. Hisobot faqat voqeasi bo'lgan kampaniyalarni o'z ichiga oladi: voqeasi bo'lmagan kampaniyalar hisobga olinmaydi. Yakuniy hisobot avval kampaniya reytingiga ko'ra o'sish tartibida, keyin campaign_name bo'yicha alfavit tartibida bo'lishi kerak. Kirish formati • campaign_name (string) — reklama kampaniyasining nomi • start_date (timestamp) — kampaniyaning boshlanish vaqti • end_date (timestamp) — kampaniyaning tugash vaqti Eventlar jadvali: • event_id (int) — voqea uchun yagona identifikator • user_id (int) — voqeani amalga oshirgan foydalanuvchining yagona identifikatori • campaign_id (int) — kampaniyaning yagona identifikatori • event_type (string) — voqea turi, masalan, 'click' yoki 'conversion' • event_time (timestamp) — voqea vaqti Ma'lumotlar bo'sh yoki noto'g'ri qiymatlarni o'z ichiga olmaydi. Chiqish formati So'rov quyidagi maydonlarni o'z ichiga olgan jadvalni qaytarishi kerak: • campaign_name (string) — reklama kampaniyasining nomi • total_events (int) — kampaniya bilan bog'liq umumiy voqealar soni • unique_users (int) — voqealarni amalga oshirgan yagona foydalanuvchilar soni • first_event_time (timestamp) — kampaniyaning birinchi voqeasi vaqti • last_event_time (timestamp) — kampaniyaning oxirgi voqeasi vaqti • campaign_rank (int) — umumiy voqealar soniga ko'ra kampaniya reytingi Ma'lumotlarni kampaniya reytingiga ko'ra o'sish tartibida, va keyin campaign_name bo'yicha alfavit tartibida saralang.
Python'da generatorlar va ro'yxatlar qanday farq qiladi?
Nima quyidagi so'rov indeksdan foydalanmaydi, agar records jadvalida (id) oddiy B-tree indeks id bo'yicha yaratilgan bo'lsa? select * from records where id % 2 = 0 - id uchun GIN turi indeks kerak - Indekslar WHERE'dagi ifodalar bilan ishlamaydi - % taqqoslash operatsiyasi, filtratsiya emas - limit va offset indeks bilan optimizatsiya uchun majburiy - So'rov raqamli maydonga murojaat qiladi, matn emas
Qimmatli bronishlar ro'yxatini ishlab chiqaring Savol [Telefon] kuni uchun a'zolar (yoki mehmonlar) uchun 30 dollardan ortiq bo'ladigan bronlarni qanday ishlab chiqasiz? Mehmonlarning xarajatlari a'zolardan farq qilishini unutmang (ro'yxatga olingan xarajatlar har yarim soatlik 'slot' uchun), va mehmon foydalanuvchisi har doim ID 0. Natijangizga muassasaning nomi, bitta ustun sifatida formatlangan a'zo nomi va xarajatni qo'shing. Xarajatga qarab kamayish tartibida saralang va subso'rovlar ishlatmang.
Berilgan nol va birlardan iborat satr. func() funksiyasini yozish kerak bo'lib, u ketma-ket birlarining maksimal sonini qaytaradi. Masalan: func("010111011") -> 3
Jadvalarning jismoniy bog'lanish turlari qanday (Hash Join, Merge Join, Nested Loop)?
Apache Airflow uchun oddiy DAG yozing
Langchain kutubxonasi bilan ishlash tajribangiz bormi? Uni yordamida qanday vazifalarni hal qildingiz?
Oracle'da so'rov bajarish rejasini qanday ko'rish mumkin? EXPLAIN PLAN va EXPLAIN ANALYZE qanday farq qiladi?