[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:data-engineer\u002Fpe-incremental-cdc-merge-mechanics":4,"config":191},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":94,"samples":105},"data-engineer","Data Engineer","","pe-incremental-cdc-merge-mechanics","Pe Incremental Cdc Merge Mechanics","tr",75,1950,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91],{"key":19,"name":20,"count":11},"data-governance-lineage","Data Governance Lineage",{"key":22,"name":23,"count":11},"data-modeling-warehousing","Data Modeling Warehousing",{"key":25,"name":26,"count":11},"data-partitioning-scaling","Data Partitioning Scaling",{"key":28,"name":29,"count":11},"data-pipeline-design","Data Pipeline Design",{"key":31,"name":32,"count":11},"data-pipeline-orchestration","Data Pipeline Orchestration",{"key":34,"name":35,"count":11},"data-pipeline-reliability","Data Pipeline Reliability",{"key":37,"name":38,"count":11},"data-quality-validation","Data Quality Validation",{"key":40,"name":41,"count":11},"pe-airflow-scheduling-dependencies","Pe Airflow Scheduling Dependencies",{"key":43,"name":44,"count":11},"pe-dbt-models-materializations-tests","Pe Dbt Models Materializations Tests",{"key":46,"name":47,"count":11},"pe-file-formats-table-formats","Pe File Formats Table Formats",{"key":8,"name":9,"count":11},{"key":50,"name":51,"count":11},"pe-spark-api-semantics-udfs","Pe Spark Api Semantics Udfs",{"key":53,"name":54,"count":11},"pe-spark-execution-shuffle-partitions","Pe Spark Execution Shuffle Partitions",{"key":56,"name":57,"count":11},"st-flink-runtime-checkpointing-state","St Flink Runtime Checkpointing State",{"key":59,"name":60,"count":11},"st-flink-time-watermarks-windows","St Flink Time Watermarks Windows",{"key":62,"name":63,"count":11},"st-kafka-broker-storage-replication","St Kafka Broker Storage Replication",{"key":65,"name":66,"count":11},"st-kafka-connect-schema-registry","St Kafka Connect Schema Registry",{"key":68,"name":69,"count":11},"st-kafka-producer-consumer-semantics","St Kafka Producer Consumer Semantics",{"key":71,"name":72,"count":11},"streaming-fundamentals","Streaming Fundamentals",{"key":74,"name":75,"count":11},"st-streaming-joins-tables","St Streaming Joins Tables",{"key":77,"name":78,"count":11},"wh-bigquery-execution-slots-cost","Wh Bigquery Execution Slots Cost",{"key":80,"name":81,"count":11},"wh-bigquery-storage-partitioning-clustering","Wh Bigquery Storage Partitioning Clustering",{"key":83,"name":84,"count":11},"wh-materialized-views-caching","Wh Materialized Views Caching",{"key":86,"name":87,"count":11},"wh-redshift-distribution-sort-vacuum","Wh Redshift Distribution Sort Vacuum",{"key":89,"name":90,"count":11},"wh-snowflake-compute-warehouses","Wh Snowflake Compute Warehouses",{"key":92,"name":93,"count":11},"wh-snowflake-storage-micropartitions","Wh Snowflake Storage Micropartitions",[95,99,102],{"key":96,"name":97,"count":98},"pipelines-etl","Pipelines \u002F ETL",450,{"key":100,"name":101,"count":98},"streaming","Streaming",{"key":103,"name":104,"count":98},"warehousing","Warehousing",[106,124,138,151,164,178],{"id":107,"topic":9,"difficulty":108,"body":109,"options":110,"correct_key":115,"explanation":123},"01a00ae7-b4ee-782a-b17a-1bab98866825",1,"Spark SQL `MERGE INTO` ifadesinde `WHEN MATCHED THEN UPDATE` cümlesi ne işe yarar?",[111,114,117,120],{"key":112,"text":113},"a","Yalnızca kaynakta bulunan her satır için yeni bir satır ekler",{"key":115,"text":116},"b","Birleştirme koşuluna göre kaynakla eşleşen hedef satırı günceller",{"key":118,"text":119},"c","Birleştirme koşulundan bağımsız olarak hedef tablodaki tüm satırları siler",{"key":121,"text":122},"d","Her çalıştırmada hedef tabloyu sıfırdan yeniden yazar","`WHEN MATCHED THEN UPDATE`, yalnızca birleştirme koşuluna göre bir kaynak satırıyla eşleşen hedef satırlara uygulanır; eşleşmeyen kaynak satırları ayrı bir `WHEN NOT MATCHED` cümlesiyle ele alınır.",{"id":125,"topic":9,"difficulty":126,"body":127,"options":128,"correct_key":121,"explanation":137},"01a00ae7-b4ef-77e0-8a3e-b1c0f6c3747a",2,"Delta Lake `MERGE INTO` ifadesinde `WHEN NOT MATCHED THEN INSERT` cümlesinin amacı nedir?",[129,131,133,135],{"key":112,"text":130},"Doğrulamadan geçemeyen kaynak satırlarını sonradan incelenmek üzere işaretler",{"key":115,"text":132},"Kaynakta artık bulunmayan hedef satırları kaldırır",{"key":118,"text":134},"Değeri kaynaktan farklı olan hedef satırları günceller",{"key":121,"text":136},"Eşleşen anahtarı olmayan kaynak satırı için yeni satır ekler","`WHEN NOT MATCHED`, kaynak satırın anahtarı hedefte bulunmadığında devreye girer; bu tam olarak onu yeni bir satır olarak eklemenin koşuludur — merge'ü bir upsert'e dönüştüren mekanizma budur.",{"id":139,"topic":9,"difficulty":108,"body":140,"options":141,"correct_key":112,"explanation":150},"01a00ae7-b4f1-7498-8c96-7c6226ff3ec8","Silinen bir kaynak satırı için Debezium değişiklik olayı şöyle görünür:\n```json\n{\"before\": {\"id\": 42, \"status\": \"active\"}, \"after\": null, \"op\": \"d\", \"ts_ms\": 1699999999000}\n```\n`\"op\": \"d\"` bu olayı tüketen bir sisteme neyi söyler?",[142,144,146,148],{"key":112,"text":143},"Satır silindi; `before` son durumu taşır, `after` null'dur",{"key":115,"text":145},"Kaynak satır aynı birincil anahtarla yeni bir satıra kopyalandı",{"key":118,"text":147},"Olay, canlı bir değişiklik değil ilk snapshot yüklemesinin bir parçasıdır",{"key":121,"text":149},"Kaynak veritabanı silme işlemini foreign key kısıtı yüzünden reddetti","Debezium'da `op` alanı işlem tipini belirtir; `\"d\"` bir delete'tir. Delete olaylarında `after` null'dur çünkü satır artık yoktur, `before` ise silinmeden hemen önceki satır durumunu taşımaya devam eder.",{"id":152,"topic":9,"difficulty":126,"body":153,"options":154,"correct_key":118,"explanation":163},"01a00ae7-b4f2-7f28-b08c-243704968549","'MERGE koşulunun kaynak tarafında, aynı hedef satırla birden fazla kaynak satırının eşleşmesi' pratikte neden en sık karşılaşılan `MERGE INTO` hatası sayılır?",[155,157,159,161],{"key":112,"text":156},"Çünkü çoğu SQL motoru fazla kaynak satırlarını hata vermeden sessizce yok sayar",{"key":115,"text":158},"Çünkü yalnızca hedef tabloda birincil anahtar tanımlı olmadığında ortaya çıkar",{"key":118,"text":160},"Çünkü Delta Lake, bir update\u002Fdelete cümlesi varken bunu reddeder",{"key":121,"text":162},"Çünkü sonraki her sorguda tam tablo taramasını tetikler, hata değil","Delta Lake ve benzeri motorlar, birleştirme koşulu birden fazla kaynak satırını tek bir hedef satırla eşleştirdiğinde ve bir `WHEN MATCHED` update\u002Fdelete cümlesi varken açık bir hata fırlatır (ör. `UnsupportedOperationException`), çünkü hangi kaynak satırının kazanacağı belirsiz olur — CDC veya extract batch'inde yinelenen anahtarlar ise sık rastlanan bir durumdur.",{"id":165,"topic":9,"difficulty":166,"body":167,"options":168,"correct_key":115,"explanation":177},"01a00ae7-b4f3-7eb6-997d-21d597650359",3,"Kaynağın bir anahtar için birden fazla satır içerebileceği bir `MERGE INTO` çalıştırmadan önce, çoklu-eşleşme hatasını hangi ön işleme adımı önler?",[169,171,173,175],{"key":112,"text":170},"Kaynağı anahtara göre sıralayıp doğruluk için sıralama sırasına güvenmek",{"key":115,"text":172},"Kaynağı `ROW_NUMBER()` ile anahtar başına dedup etmek",{"key":118,"text":174},"`MERGE INTO` ifadesinin kendisine bir `LIMIT 1` cümlesi eklemek",{"key":121,"text":176},"Merge çalışmadan önce `spark.sql.shuffle.partitions` değerini artırmak","Yalnızca sıralamak yinelenen satırları kaldırmaz, `LIMIT 1`'i `MERGE INTO` ifadesine eklemek geçerli değildir ve shuffle partition sayısının yinelenen anahtarlarla ilgisi yoktur. Kaynağı anahtara göre pencereleyip bir güncellik sütununa göre sıralamak ve anahtar başına yalnızca en üstteki satırı tutmak, birleştirme koşulu değerlendirilmeden önce anahtar başına en fazla bir kaynak satırı garanti eder.",{"id":179,"topic":9,"difficulty":126,"body":180,"options":181,"correct_key":112,"explanation":190},"01a00ae7-b4f4-78ad-891c-bc3854c9f354","Bir Spark `INSERT OVERWRITE TABLE t PARTITION (dt='2026-08-15') SELECT ...` ifadesi hedef partition'a ne yapar?",[182,184,186,188],{"key":112,"text":183},"O partition'ın tüm içeriğini SELECT sonucuyla değiştirir",{"key":115,"text":185},"SELECT sonucunu o partition'da zaten var olan satırlara ekler",{"key":118,"text":187},"SELECT sonucunu var olan satırlarla bir birincil anahtar üzerinden birleştirir",{"key":121,"text":189},"Yalnızca değişen sütunları günceller, değişmeyen satırlara dokunmaz","Belirli bir partition üzerinde `INSERT OVERWRITE`, o partition'ın var olan içeriğini atar ve tamamen sorgu sonucuyla değiştirir — `MERGE INTO`'nun aksine satır düzeyinde bir eşleştirme yoktur.",{"fields":192,"seniorities":408,"interview_shapes":409,"locales":414,"oauth":416,"question_count":419,"coach_enabled":420,"jd_match_enabled":420},[193,218,238,254,278,291,310,329,351,370,377,399],{"key":194,"name_tr":195,"name_en":195,"sort":108,"specializations":196},"backend","Backend",[197,200,203,206,209,212,215],{"key":198,"name":199,"field":194},"general","Genel",{"key":201,"name":202,"field":194},"go","Go",{"key":204,"name":205,"field":194},"python","Python",{"key":207,"name":208,"field":194},"java","Java",{"key":210,"name":211,"field":194},"csharp","C#\u002F.NET",{"key":213,"name":214,"field":194},"nodejs","Node.js",{"key":216,"name":217,"field":194},"php","PHP",{"key":219,"name_tr":220,"name_en":220,"sort":126,"specializations":221},"frontend","Frontend",[222,223,226,229,232,235],{"key":198,"name":199,"field":219},{"key":224,"name":225,"field":219},"javascript","JavaScript",{"key":227,"name":228,"field":219},"typescript","TypeScript",{"key":230,"name":231,"field":219},"react","React",{"key":233,"name":234,"field":219},"vue","Vue",{"key":236,"name":237,"field":219},"angular","Angular",{"key":239,"name_tr":240,"name_en":240,"sort":166,"specializations":241},"fullstack","Fullstack",[242,243,244,245,246,247,248,249,250,251,252,253],{"key":198,"name":199,"field":239},{"key":201,"name":202,"field":194},{"key":204,"name":205,"field":194},{"key":207,"name":208,"field":194},{"key":210,"name":211,"field":194},{"key":213,"name":214,"field":194},{"key":216,"name":217,"field":194},{"key":224,"name":225,"field":219},{"key":227,"name":228,"field":219},{"key":230,"name":231,"field":219},{"key":233,"name":234,"field":219},{"key":236,"name":237,"field":219},{"key":255,"name_tr":256,"name_en":256,"sort":257,"specializations":258},"devops-cloud","DevOps \u002F Cloud",4,[259,260,263,266,269,272,275],{"key":198,"name":199,"field":255},{"key":261,"name":262,"field":255},"aws","AWS",{"key":264,"name":265,"field":255},"gcp","GCP",{"key":267,"name":268,"field":255},"azure","Azure",{"key":270,"name":271,"field":255},"kubernetes","Kubernetes",{"key":273,"name":274,"field":255},"terraform","Terraform",{"key":276,"name":277,"field":255},"linux","Linux",{"key":279,"name_tr":280,"name_en":280,"sort":281,"specializations":282},"ai-engineer","AI Engineer",5,[283,284,285,288],{"key":198,"name":199,"field":279},{"key":204,"name":205,"field":279},{"key":286,"name":287,"field":279},"llm-rag","LLM\u002FRAG",{"key":289,"name":290,"field":279},"mlops","MLOps",{"key":292,"name_tr":293,"name_en":294,"sort":295,"specializations":296},"database","Veritabanı","Database",6,[297,298,301,304,307],{"key":198,"name":199,"field":292},{"key":299,"name":300,"field":292},"postgresql","PostgreSQL",{"key":302,"name":303,"field":292},"mysql","MySQL",{"key":305,"name":306,"field":292},"mongodb","MongoDB",{"key":308,"name":309,"field":292},"redis","Redis",{"key":311,"name_tr":312,"name_en":313,"sort":314,"specializations":315},"mobile","Mobil","Mobile",7,[316,317,320,323,326],{"key":198,"name":199,"field":311},{"key":318,"name":319,"field":311},"ios-swift","iOS (Swift)",{"key":321,"name":322,"field":311},"android-kotlin","Android (Kotlin)",{"key":324,"name":325,"field":311},"flutter","Flutter",{"key":327,"name":328,"field":311},"react-native","React Native",{"key":330,"name_tr":331,"name_en":332,"sort":333,"specializations":334},"security","Güvenlik","Security",8,[335,336,339,342,345,348],{"key":198,"name":199,"field":330},{"key":337,"name":338,"field":330},"appsec","AppSec",{"key":340,"name":341,"field":330},"offensive-pentest","Offensive \u002F Pentest",{"key":343,"name":344,"field":330},"cloud-security","Cloud Security",{"key":346,"name":347,"field":330},"devsecops","DevSecOps",{"key":349,"name":350,"field":330},"blue-team-incident","Blue Team \u002F Incident",{"key":352,"name_tr":353,"name_en":354,"sort":355,"specializations":356},"qa-test-automation","QA \u002F Test Otomasyonu","QA \u002F Test Automation",9,[357,358,361,364,367],{"key":198,"name":199,"field":352},{"key":359,"name":360,"field":352},"test-automation","Test Automation",{"key":362,"name":363,"field":352},"sdet","SDET",{"key":365,"name":366,"field":352},"performance-testing","Performance Testing",{"key":368,"name":369,"field":352},"mobile-qa","Mobile QA",{"key":5,"name_tr":6,"name_en":6,"sort":371,"specializations":372},10,[373,374,375,376],{"key":198,"name":199,"field":5},{"key":96,"name":97,"field":5},{"key":100,"name":101,"field":5},{"key":103,"name":104,"field":5},{"key":378,"name_tr":379,"name_en":380,"sort":381,"specializations":382},"game-dev","Oyun Geliştirme","Game Development",11,[383,384,387,390,393,396],{"key":198,"name":199,"field":378},{"key":385,"name":386,"field":378},"unity-csharp","Unity (C#)",{"key":388,"name":389,"field":378},"unreal-cpp","Unreal (C++)",{"key":391,"name":392,"field":378},"gameplay","Gameplay",{"key":394,"name":395,"field":378},"graphics-rendering","Graphics \u002F Rendering",{"key":397,"name":398,"field":378},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":400,"name_tr":401,"name_en":401,"sort":402,"specializations":403},"ml-engineer","ML Engineer",12,[404,405],{"key":198,"name":199,"field":400},{"key":406,"name":407,"field":400},"classical-ml","Classical ML",[14,15,16],{"junior":410,"mid":412,"senior":413},{"questions":411,"median_sec":3},20,{"questions":411,"median_sec":3},{"questions":411,"median_sec":3},[10,415],"en",[417,418],"google","github",27600,true]