Data Engineer
Έχετε δουλέψει με διαχειριστές πλαισίου (context managers) στην Python; Τι είναι και ποιος είναι ο σκοπός τους;
Τα 3 βασικά κριτήρια για την επιλογή προσφοράς, αν υπάρχουν πολλές προτάσεις.
Γνωρίζεις μια βιβλιοθήκη σε Rust, πολυνηματική, πολύ γρήγορη, που μπορεί να αντικαταστήσει το Pandas για Data Science και Big Data;
Πώς παραδίδετε τον κώδικα DAG στην παραγωγή;
εισαγάγετε clickhouse_driver from airflow.hooks.base import * def get_clickhouse_client(): conn = BaseHook.get_connection("clickhouse_default") return clickhouse_driver.Client( host=conn.host, port=conn.port, user=conn.login, password=conn.password, database=conn.schema )
Η λειτουργία παραθύρου SUM() OVER (PARTITION BY user_id) — σε μια περίπτωση προσθέτουμε ORDER BY ημερομηνία αγοράς, σε άλλη όχι. Ποια είναι η διαφορά;
Πώς είναι οργανωμένο το QA σας (έλεγχος ποιότητας δεδομένων);
Πώς διορθώσατε την προκατάληψη των δεδομένων ανά client_id όταν ένας πελάτης ήταν σημαντικά μεγαλύτερος από τους άλλους; Ποιες είναι οι επιλογές;
Έχετε δύο σχετιζόμενους πίνακες: first_table και second_table. Θέλετε να εκτελέσετε την εντολή TRUNCATE TABLE second_table CASCADE;, για να διαγράψετε όλες τις γραμμές από τον πίνακα second_table και όλα τα εξαρτώμενα δεδομένα. Ποιες μπορεί να είναι οι συνέπειες της εκτέλεσης αυτής της εντολής; create table first_table ( id integer primary key ); create table second_table ( id serial primary key, first_table_fk integer references first_table(id) ); - Η ακολουθία second_table_id_seq θα επαναφερθεί στην αρχική τιμή. - Όλες οι εγγραφές από το first_table που σχετίζονται μέσω ξένης κλείδας με τον second_table θα διαγραφούν. - Οι υπάρχοντες δείκτες για τον second_table θα διαγραφούν και θα δημιουργηθούν ξανά αυτόματα. - Σε μελλοντικές εισαγωγές στον second_table, η προεπιλεγμένη τιμή για το id μπορεί να ξεκινά με μια λανθασμένη τιμή. - Θα προκύψει σφάλμα, καθώς η εντολή CASCADE απαγορεύεται για πίνακες με ξένες κλείδες.
Χρησιμοποιείτε τεχνητή νοημοσύνη στη τρέχουσα εργασία σας; Ποια εργαλεία και πώς ακριβώς;
Εμφανίστε τον αριθμό των παραγγελιών και "προϊόντα της αναγκαίας κατηγορίας στην παραγγελία" για το 2021 στις κατηγορίες "Ένδυση" και για το 2022 στην κατηγορία "Παπούτσια" (τελική προβολή: 2 γραμμές. Πεδία: έτος, αριθμός προϊόντων, αριθμός παραγγελιών) with cte as( select year(o.order_date) as year_orders, g.cat_1, count(distinct o.order_id) as count_orders, sum(g.quantity) as count_quan from Orders o join Goods g on o.order_id = g.order_id where (g.cat_1 = 'Ένδυση' and Year(o.order_date) = 2021) or (g.cat_1 = 'Παπούτσια' and Year(o.order_date) = 2022) group by year_orders, g.cat_1 ) select year_orders, count_quan, count_orders from cte για το 2025, τα 3 κορυφαία σε κάθε κατηγορία με βάση τον όγκο πωλήσεων μοντέλο with cte as( select cat_1, price, quantity, model, rank() over(partition by g.cat_1) as rk from Orders o join Goods g on o.order_id = g.order_id where Year(o.order_date) = 2025 ) για το 2025, τα 3 κορυφαία σε κάθε κατηγορία με βάση το άθροισμα πωλήσεων μοντέλο with cte as( select g.cat_1, g.model, (price * quantity), rank() over(partition by g.cat_1) as rk from Orders o join Goods g on o.order_id = g.order_id where Year(o.order_date) = 2025 ) with cte as( select g.cat_1, g.model, sum(price * quantity) as sum_, rank() over(partition by g.cat_1 order by sum() desc) as rk from Orders o join Goods g on o.order_id = g.order_id where Year(o.order_date) = 2025 ) with cte1 as( select g.cat_1, g.model, sum(price * quantity) as sum_total, from Orders o join Goods g on o.order_id = g.order_id where Year(o.order_date) = 2025 ), cte2 as(select g.cat_1, g.model, sum_total, rank() over(partition by g.cat_1 order sum_total desc) as rk from cte1 ) select g.cat_1, g.model, sum_total from cte2 where rk <=3 γννωρίστε το όνομα της κατηγορίας, το μοντέλο και το συνολικό ποσό πωλήσεων (top 3) with cte1 as( select g.cat_1 as cat_name, g.model as model, sum(price * quantity) as sum_total, from Orders o join Goods g on o.order_id = g.order_id where Year(o.order_date) = 2025 group by Year(o.order_date), g.model ), cte2 as(select cat_name, model, sum_total, rank() over(partition by cat_name order sum_total desc) as rk from cte1 ) select cat_name, model, sum_total from cte2 where rk <=3
Πώς να ξεκινήσετε το δεύτερο DAG του Airflow αμέσως μετά την επιτυχή ολοκλήρωση του πρώτου;
Τι ακριβώς σας εντυπωσίασε στη θέση μας, γιατί αποφασίσατε να απαντήσετε;
Γιατί χρησιμοποιήθηκε το Parquet αντί για το ORC;
Πώς θα αντιμετωπίζεται η εργασία με τους κινδύνους διαφοράς δεδομένων και την ευθύνη για τα δεδομένα;
# τι εμφανίζει s = 'Abracadabra' print(s[5][0][0]) b = 'a' print(b[0][0]) print(s[::-2]) #Arcd s = [1, 2, 3] print(s ** 2) def foo(*args, **kwargs): print(args) print(kwargs)
Πώς εργαστήκατε με τα αρχεία κατά την επανεκκίνηση του DAG μετά την αποτυχία του, ώστε να μην αντικαταστήσετε τα δεδομένα στο S3 με μη ολοκληρωμένα δεδομένα;
Τι είναι ένα "νεκρό ζεύγος" (dead tuple);
Ποια είναι η διαφορά μεταξύ πολυνηματισμού και πολλαπλής επεξεργασίας; Για ποιες εργασίες χρησιμοποιούμε νήματα και για ποιες διαδικασίες;
Έχετε εμπειρία με μηχανές όπως Trino ή με μορφές πινάκων (Iceberg, Parquet) στο Spark;