{"id":5196,"date":"2023-05-30T11:04:47","date_gmt":"2023-05-30T08:04:47","guid":{"rendered":"https:\/\/bentego.com\/?p=5196"},"modified":"2025-10-20T16:09:18","modified_gmt":"2025-10-20T16:09:18","slug":"azure-uzerinde-data-pipeline-olusturma","status":"publish","type":"post","link":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/","title":{"rendered":"Azure \u00fczerinde Data Pipeline Olu\u015fturma"},"content":{"rendered":"<p style=\"text-align: left;\">Merhabalar bu yaz\u0131mda sizlere Bulut Servis Sa\u011flay\u0131c\u0131lar\u0131ndan olan\u00a0<strong class=\"kn ew\">Azure<\/strong>\u00a0\u00fczerinde bir\u00a0<strong class=\"kn ew\">Data Pipeline<\/strong>\u00a0olu\u015fturma s\u00fcrecini anlataca\u011f\u0131m. Gelin isterseniz ilk \u00f6nce projemizin mimarisine bakal\u0131m.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*5P8E-uh4BIKhoFiYVzL6lA.png\" \/><\/p>\n<p id=\"b6c9\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Mimarimiz yukar\u0131da g\u00f6rm\u00fc\u015f oldu\u011funuz gibidir. Veri ak\u0131\u015f\u0131 anlat\u0131m\u0131na ge\u00e7meden \u00f6nce\u00a0<strong class=\"kn ew\">Azure<\/strong>\u00a0\u00fczerinde kulland\u0131\u011f\u0131m\u0131z servisleri k\u0131saca bir tan\u0131yal\u0131m.<\/p>\n<p id=\"476d\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Azure Resource Group \u2192 Microsoft Azure<\/strong>\u00a0bulut platformunda kaynaklar\u0131n\u0131z\u0131 y\u00f6netmek i\u00e7in kullan\u0131lan bir yap\u0131d\u0131r.\u00a0<strong class=\"kn ew\">Azure<\/strong>\u2019da olu\u015fturdu\u011funuz kaynaklar\u0131, sanal makineleri, depolama hesaplar\u0131n\u0131, a\u011f yap\u0131land\u0131rmalar\u0131n\u0131, uygulamalar\u0131 ve di\u011fer hizmetleri mant\u0131ksal bir grup i\u00e7inde toplaman\u0131z\u0131 sa\u011flar.<\/p>\n<p id=\"9c9e\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Azure Data Factory \u2192 Microsoft Azure<\/strong>\u00a0bulut platformunda veri entegrasyonu ve veri i\u015fleme i\u015flerini otomatikle\u015ftirmek i\u00e7in kullan\u0131lan bir hizmettir.\u00a0<strong class=\"kn ew\">Azure Data Factory<\/strong>, farkl\u0131 veri kaynaklar\u0131 aras\u0131nda<strong class=\"kn ew\">\u00a0veri hareketini<\/strong>,\u00a0<strong class=\"kn ew\">d\u00f6n\u00fc\u015f\u00fcm\u00fcn\u00fc<\/strong>\u00a0ve\u00a0<strong class=\"kn ew\">i\u015flenmesini<\/strong>\u00a0sa\u011flayarak<strong class=\"kn ew\">\u00a0veri entegrasyonunu<\/strong>\u00a0kolayla\u015ft\u0131r\u0131r.<\/p>\n<p id=\"cad0\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Azure Synapse Analytics \u2192 Microsoft Azure<\/strong>\u00a0bulut platformunda,\u00a0<strong class=\"kn ew\">verilerinizi analiz etmek, i\u015flemek ve raporlamak<\/strong>\u00a0i\u00e7in kullanabilece\u011finiz g\u00fc\u00e7l\u00fc bir veri analiti\u011fi \u00e7\u00f6z\u00fcm\u00fcd\u00fcr.<strong class=\"kn ew\">Azure Synapse Analytics<\/strong>, veri ambar\u0131, veri entegrasyonu, veri sorgulama ve<strong class=\"kn ew\">\u00a0b\u00fcy\u00fck veri analiti\u011fi<\/strong>\u00a0gibi i\u015flemleri<strong class=\"kn ew\">\u00a0tek bir platformda<\/strong>\u00a0birle\u015ftirir.<\/p>\n<p id=\"c68a\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Azure Data Lake \u2192\u00a0<\/strong>B\u00fcy\u00fck veri depolama ve analizi i\u00e7in kullan\u0131lan bir hizmettir.\u00a0<strong class=\"kn ew\">Azure<\/strong>\u00a0bulut platformunda,<strong class=\"kn ew\">\u00a0yap\u0131land\u0131r\u0131lm\u0131\u015f<\/strong>\u00a0ve<strong class=\"kn ew\">\u00a0yap\u0131land\u0131r\u0131lmam\u0131\u015f<\/strong>\u00a0b\u00fcy\u00fck veri k\u00fctlelerini\u00a0<strong class=\"kn ew\">g\u00fcvenli ve \u00f6l\u00e7eklenebilir<\/strong>\u00a0bir \u015fekilde\u00a0<strong class=\"kn ew\">depolamak<\/strong>\u00a0i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p id=\"aef6\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Azure SQL Database \u2192 Microsoft Azure<\/strong>\u00a0bulut platformunda bar\u0131nd\u0131r\u0131lan ili\u015fkisel veritaban\u0131 hizmetidir. Geleneksel<strong class=\"kn ew\">\u00a0SQL Server<\/strong>\u00a0veritaban\u0131n\u0131n<strong class=\"kn ew\">\u00a0bulut tabanl\u0131 bir s\u00fcr\u00fcm\u00fc<\/strong>\u00a0olarak d\u00fc\u015f\u00fcn\u00fclebilir.<\/p>\n<p id=\"4502\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Mimariye bakt\u0131\u011f\u0131m\u0131zda ilk k\u0131s\u0131mda\u00a0<strong class=\"kn ew\">On-Premise<\/strong>\u00a0tarafta ger\u00e7ekle\u015fen i\u015flemlerimiz mevcut. Gelin isterseniz ilk olarak lokalimizde \u00e7al\u0131\u015fan python koduna ve \u00e7\u0131kt\u0131s\u0131na bir bakal\u0131m.<\/p>\n<blockquote>\n<p data-selectable-paragraph=\"\"><span class=\"hljs-keyword\">import<\/span> spotipy<br \/>\n<span class=\"hljs-keyword\">from<\/span> spotipy.oauth2 <span class=\"hljs-keyword\">import<\/span> SpotifyClientCredentials<br \/>\n<span class=\"hljs-keyword\">import<\/span> pandas <span class=\"hljs-keyword\">as<\/span> pd<br \/>\n<span class=\"hljs-keyword\">from<\/span> datetime <span class=\"hljs-keyword\">import<\/span> date<br \/>\n<span class=\"hljs-keyword\">import<\/span> configparser<\/p>\n<p>parser = configparser.ConfigParser()<br \/>\nparser.read(<span class=\"hljs-string\">&#8220;conf.ini&#8221;<\/span>)<\/p>\n<p>client_credentials_manager = SpotifyClientCredentials(<br \/>\nclient_id = parser.get(<span class=\"hljs-string\">&#8220;credentials&#8221;<\/span>,<span class=\"hljs-string\">&#8220;CLIENT_ID&#8221;<\/span>),<br \/>\nclient_secret = parser.get(<span class=\"hljs-string\">&#8220;credentials&#8221;<\/span>, <span class=\"hljs-string\">&#8220;CLIENT_SECRET&#8221;<\/span>)<br \/>\n)<\/p>\n<p>sp = spotipy.Spotify(client_credentials_manager = client_credentials_manager)<\/p>\n<p>playlist_link = <span class=\"hljs-string\">&#8216;https:\/\/open.spotify.com\/playlist\/37i9dQZF1EIWxkuBxGv3mp&#8217;<\/span><\/p>\n<p>playlist_URI = playlist_link.split(<span class=\"hljs-string\">&#8220;\/&#8221;<\/span>)[-<span class=\"hljs-number\">1<\/span>]<br \/>\ndata = sp.playlist_tracks(playlist_URI)<br \/>\ndate_str = <span class=\"hljs-built_in\">str<\/span>(date.today())<\/p>\n<p>album_list = []<\/p>\n<p><span class=\"hljs-keyword\">for<\/span> row <span class=\"hljs-keyword\">in<\/span> data[<span class=\"hljs-string\">&#8220;items&#8221;<\/span>]:<br \/>\nalbum_id = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;id&#8221;<\/span>]<br \/>\nalbum_name = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;name&#8221;<\/span>]<br \/>\nalbum_release_date = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;release_date&#8221;<\/span>]<br \/>\nalbum_total_tracks = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;total_tracks&#8221;<\/span>]<br \/>\nalbum_url = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;external_urls&#8221;<\/span>][<span class=\"hljs-string\">&#8220;spotify&#8221;<\/span>]<br \/>\nalbum_element = {<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0&#8220;album_id&#8221;<\/span>: album_id,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0&#8220;name&#8221;<\/span>: album_name,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0&#8220;album_release_date&#8221;<\/span>: album_release_date,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0&#8220;album_total_tracks&#8221;<\/span>: album_total_tracks,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0&#8220;album_url&#8221;<\/span>: album_url<br \/>\n}<br \/>\nalbum_list.append(album_element)<\/p>\n<p>artist_list = []<\/p>\n<p><span class=\"hljs-keyword\">for<\/span> row <span class=\"hljs-keyword\">in<\/span> data[<span class=\"hljs-string\">&#8220;items&#8221;<\/span>]:<br \/>\n<span class=\"hljs-keyword\">\u00a0 for<\/span> key, value <span class=\"hljs-keyword\">in<\/span> row.items():<br \/>\n<span class=\"hljs-keyword\">\u00a0 \u00a0 if<\/span> key == <span class=\"hljs-string\">&#8220;track&#8221;<\/span>:<br \/>\n<span class=\"hljs-keyword\">\u00a0 \u00a0 \u00a0 for<\/span> artist <span class=\"hljs-keyword\">in<\/span> value[<span class=\"hljs-string\">&#8220;artists&#8221;<\/span>]:<br \/>\nartist_dict = {<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&#8220;artist_id&#8221;<\/span>: artist[<span class=\"hljs-string\">&#8220;id&#8221;<\/span>],<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&#8220;artist_name&#8221;<\/span>: artist[<span class=\"hljs-string\">&#8220;name&#8221;<\/span>],<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0&#8220;external_url&#8221;<\/span>: artist[<span class=\"hljs-string\">&#8220;href&#8221;<\/span>]<br \/>\n}<br \/>\nartist_list.append(artist_dict)<\/p>\n<p>song_list = []<\/p>\n<p><span class=\"hljs-keyword\">for<\/span> row <span class=\"hljs-keyword\">in<\/span> data[<span class=\"hljs-string\">&#8220;items&#8221;<\/span>]:<br \/>\nsong_id = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;id&#8221;<\/span>]<br \/>\nsong_name = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;name&#8221;<\/span>]<br \/>\nsong_duration = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;duration_ms&#8221;<\/span>]<br \/>\nsong_url = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;external_urls&#8221;<\/span>][<span class=\"hljs-string\">&#8220;spotify&#8221;<\/span>]<br \/>\nsong_popularity = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;popularity&#8221;<\/span>]<br \/>\nsong_added = row[<span class=\"hljs-string\">&#8220;added_at&#8221;<\/span>]<br \/>\nalbum_id = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;id&#8221;<\/span>]<br \/>\nartist_id = row[<span class=\"hljs-string\">&#8220;track&#8221;<\/span>][<span class=\"hljs-string\">&#8220;album&#8221;<\/span>][<span class=\"hljs-string\">&#8220;artists&#8221;<\/span>][<span class=\"hljs-number\">0<\/span>][<span class=\"hljs-string\">&#8220;id&#8221;<\/span>]<br \/>\nsong_element = {<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;song_id&#8221;<\/span>: song_id,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;song_name&#8221;<\/span>: song_name,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;duration_ms&#8221;<\/span>: song_duration,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;url&#8221;<\/span>: song_url,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;popularity&#8221;<\/span>: song_popularity,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;song_added&#8221;<\/span>: song_added,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;album_id&#8221;<\/span>: album_id,<br \/>\n<span class=\"hljs-string\">\u00a0 \u00a0 &#8220;artist_id&#8221;<\/span>: artist_id<br \/>\n}<br \/>\nsong_list.append(song_element)<\/p>\n<p>album_df = pd.DataFrame.from_dict(album_list)<br \/>\nalbum_df = album_df.drop_duplicates(subset = [<span class=\"hljs-string\">&#8220;album_id&#8221;<\/span>])<\/p>\n<p>artist_df = pd.DataFrame.from_dict(artist_list)<br \/>\nartist_df = artist_df.drop_duplicates(subset = [<span class=\"hljs-string\">&#8220;artist_id&#8221;<\/span>])<\/p>\n<p>song_df = pd.DataFrame.from_dict(song_list)<br \/>\nalbum_df[<span class=\"hljs-string\">&#8220;release_date&#8221;<\/span>] = pd.to_datetime(album_df[<span class=\"hljs-string\">&#8220;album_release_date&#8221;<\/span>])<br \/>\nsong_df[<span class=\"hljs-string\">&#8220;song_added&#8221;<\/span>] = pd.to_datetime(song_df[<span class=\"hljs-string\">&#8220;song_added&#8221;<\/span>])<\/p>\n<p>song_df.to_parquet(<span class=\"hljs-string\">f&#8221;data\\\\<span class=\"hljs-subst\">{date_str}<\/span>_song_ds.parquet&#8221;<\/span>,engine=<span class=\"hljs-string\">&#8220;fastparquet&#8221;<\/span>)<br \/>\nalbum_df.to_parquet(<span class=\"hljs-string\">f&#8221;data\\\\<span class=\"hljs-subst\">{date_str}<\/span>_album_ds.parquet&#8221;<\/span>,engine=<span class=\"hljs-string\">&#8220;fastparquet&#8221;<\/span>)<br \/>\nartist_df.to_parquet(<span class=\"hljs-string\">f&#8221;data\\\\<span class=\"hljs-subst\">{date_str}<\/span>_artist_ds.parquet&#8221;<\/span>,engine=<span class=\"hljs-string\">&#8220;fastparquet&#8221;<\/span>)<\/p><\/blockquote>\n<h3><strong>Conf.ini<\/strong><\/h3>\n<blockquote>\n<p data-selectable-paragraph=\"\">[credentials]<br \/>\nCLIENT_ID = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<br \/>\nCLIENT_SECRET = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX<\/p>\n<\/blockquote>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:843\/1*H_UxtPvGdTGTN14Vi3nOwg.png\" \/><\/p>\n<p id=\"eb98\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" data-selectable-paragraph=\"\">G\u00f6rm\u00fc\u015f oldu\u011funuz\u00a0<strong class=\"kn ew\">Python<\/strong>\u00a0kodu\u00a0<strong class=\"kn ew\">Spotify API<\/strong>\u2019na istekte bulunarak d\u00f6nen sonu\u00e7tan 3 farkl\u0131 veri seti elde ederek bunlar\u0131\u00a0<strong class=\"kn ew\">parquet\u00a0<\/strong>format\u0131nda belirtilen dizine kaydediyor.<\/p>\n<p id=\"f9e4\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" data-selectable-paragraph=\"\">Evet lokalimizdeki i\u015flemleri b\u00f6ylelikle bitiyoruz. \u015eimdi\u00a0<strong class=\"kn ew\">Azure\u00a0<\/strong>\u00fczerindeki servislerimizi olu\u015fturarak i\u015flemlerimize devam edelim.<\/p>\n<h3><strong class=\"kn ew\">Resource Group<\/strong>\u00a0Olu\u015fturma \u0130\u015flemi:<\/h3>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*8He4AbwUII1F1yMXF7pOJw.png\" \/><\/p>\n<h3><strong class=\"kn ew\">Azure Data Lake<\/strong>\u00a0Olu\u015fturma \u0130\u015flemi:<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:929\/1*xB-lVd6HTUSfK_8vJpPr8g.png\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*YIp9voASTPcanzvyCHveiw.png\" \/><\/p>\n<h3><strong class=\"kn ew\">Azure Data Factory\u00a0<\/strong>Olu\u015fturma \u0130\u015flemi:<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*4OMx4YLapUrdoR8Zot4kSA.png\" \/><\/p>\n<h3><strong class=\"kn ew\">Azure Synapse Analytics\u00a0<\/strong>Olu\u015fturma \u0130\u015flemi:<\/h3>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:987\/1*TCHOUTfB_S9ccj3WeHZNnw.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:996\/1*3SWNho0Q9KxykNTcNUd2Wg.png\" \/><\/p>\n<h3><strong class=\"kn ew\">Azure SQL Database\u00a0<\/strong>Olu\u015fturma \u0130\u015flemi:<\/h3>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*xKbbvi_J2TzGvMKXsHVoVg.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*BB7pXpH1EUKyagVnIojvZQ.png\" \/><\/p>\n<p style=\"text-align: left;\" data-selectable-paragraph=\"\">Gerekli servisleri olu\u015fturdu\u011fumuza g\u00f6re\u00a0<strong class=\"kn ew\">Azure Data Factory Studio\u00a0<\/strong>ekran\u0131na giderek\u00a0<strong class=\"kn ew\">Manage<\/strong>\u00a0sekmesinden\u00a0<strong class=\"kn ew\">Integration Runtimes(IR)<\/strong>\u00a0k\u0131sm\u0131na gelerek lokalimizle ba\u011flant\u0131 sa\u011flayacak yeni bir tanesini olu\u015fturaca\u011f\u0131z.<\/p>\n<h3><strong class=\"kn ew\">Self-Hosted IR<\/strong>\u00a0Olu\u015fturma \u0130\u015flemi:<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*Uv99elh3b2lCsh9xPF6fVw.png\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:933\/1*78aNh3npqhOWwSEzk-zVrQ.png\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:983\/1*h2vReC5D0O2zfhCwe-LvIQ.png\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:929\/1*GjxhLHTxtfVGsNmPAXPDow.png\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:932\/1*teBErOXKVtLzPkG9Nw353g.png\" \/><\/p>\n<p style=\"text-align: left;\"><strong class=\"kn ew\">Option 2<\/strong>&#8216;deki link\u2019e t\u0131klayarak indirme i\u015flemini ger\u00e7ekle\u015ftiriyoruz. \u0130\u015flem bittikten sonra \u00e7\u0131kacak ekrana\u00a0<strong class=\"kn ew\">Key1<\/strong>&#8216;i kopyalayarak ilgili alana yap\u0131\u015ft\u0131r\u0131yoruz.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*XLQr_qa9OVe8-XycIYT2wA.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*oza8oqksX6vy6K71oKlAvQ.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*QK2qd2fjpedOf62jlvAvRA.png\" \/><\/p>\n<p id=\"1208\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Ba\u015far\u0131l\u0131 bir \u015fekilde lokalimiz ile ba\u011flant\u0131 sa\u011flayacak ve ilgili i\u015flemleri orada ger\u00e7ekle\u015ftirecek olan\u00a0<strong class=\"kn ew\">IR<\/strong>\u2019\u0131 olu\u015fturmu\u015f olduk.<\/p>\n<p id=\"e974\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Data Factory<\/strong>\u00a0\u00fczerinde olu\u015fturaca\u011f\u0131m\u0131z Pipeline da lokalimizde ki parquet dosyalar\u0131n\u0131 kullanabilmek i\u00e7in<strong class=\"kn ew\">\u00a0Linked Service<\/strong>\u00a0olu\u015fturaca\u011f\u0131z onu da a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 takip ederek olu\u015fturabilirsiniz.<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*0SnHnnpTyeAFHdIFiUcisQ.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:923\/1*xpOUhN1P9pwohR8UTlA2Lg.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:852\/1*KGYK6kgqsvo-vsZeQ42UiA.png\" \/><\/p>\n<p style=\"text-align: left;\" data-selectable-paragraph=\"\">Olu\u015fturaca\u011f\u0131m\u0131z Data Pipeline i\u00e7erisinde bu\u00a0<strong class=\"kn ew\">LS(Linked Service)\u2019i\u00a0<\/strong>kullanarak lokal\u2019deki her bir parquet format\u0131 e\u011fer bug\u00fcn\u00fcn tarihi ile ba\u015fl\u0131yorsa onu alarak\u00a0<strong class=\"kn ew\">Azure Data Lake<\/strong>\u2019deki belirtti\u011fimiz dizine kopyalayacak.<\/p>\n<h3><strong class=\"kn ew\">DP_Extract_OnpremToADL2:<\/strong><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*QKJN0-gB4O6Lbv_SCFayuQ.png\" \/><\/p>\n<p style=\"text-align: left;\">Yukar\u0131da g\u00f6rm\u00fc\u015f oldu\u011funuz\u00a0<strong class=\"kn ew\">Data Pipelin<\/strong>e\u2019\u0131 a\u00e7\u0131klamak gerekirse yapt\u0131\u011f\u0131 i\u015f\u00a0<strong class=\"kn ew\">Get Metadata<\/strong>\u2019y\u0131 kullanarak lokal\u2019deki her\u00a0<strong class=\"kn ew\">parquet\u00a0<\/strong>dosyas\u0131n\u0131n dosya ismini\u00a0<strong class=\"kn ew\">ForEach Loop<\/strong>\u2019unda d\u00f6nd\u00fcrek e\u011fer bug\u00fcn\u00fcn tarihiyle ba\u015fl\u0131yorsa kopyalama i\u015flemini ger\u00e7ekle\u015ftirecek e\u011fer de\u011filse hi\u00e7bir i\u015flem yapmayacak.Bu kontrol\u00fc yapan Activity\u00a0<strong class=\"kn ew\">\u2018If Condition\u2019\u00a0<\/strong>ve ko\u015fulu yapan kod ise a\u015fa\u011f\u0131daki gibidir.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:965\/1*AgXLljZQHSk0TggJTxu9Jg.png\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*9aVinaN8N_mTU0VYdMQBog.png\" \/><\/p>\n<p style=\"text-align: left;\">Data Pipeline\u2019\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmekteyiz.\u00a0<strong class=\"kn ew\">Azure Data Lake<\/strong>\u00a0\u00fczerindeki belirtti\u011fimiz dizini kontrol ederek veriler ba\u015far\u0131l\u0131 \u015fekilde gelmi\u015f mi \u015fimdi ona bakal\u0131m.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*nET4rlIQE4JvEtJoWECnbA.png\" \/><\/p>\n<p id=\"5cc9\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Lokalimizdeki veri setlerinin ba\u015far\u0131l\u0131 \u015fekilde kopyaland\u0131\u011f\u0131 g\u00f6rmekteyiz.<\/p>\n<p id=\"797d\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Bir sonraki a\u015famam\u0131z\u00a0<strong class=\"kn ew\">Azure Synapse Analytics<\/strong>\u00a0\u00fczerinde\u00a0<strong class=\"kn ew\">Spark Pool<\/strong>\u00a0olu\u015fturarak veri temizleme ve d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemi uygulayaca\u011f\u0131z.<\/p>\n<p style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Spark Pool<\/strong>\u00a0Olu\u015fturma \u0130\u015flemi:<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*XuJstL2qptYGIteyrJ9ceg.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*LU2DF6wi5nMfX-kStVtlgQ.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*Oq_ZXEN6RWab9gtKp779iA.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*1nEb36z936EiJoG8MMX76g.png\" \/><\/p>\n<blockquote>\n<p data-selectable-paragraph=\"\"><span class=\"hljs-keyword\">from<\/span> notebookutils <span class=\"hljs-keyword\">import<\/span> mssparkutils<br \/>\n<span class=\"hljs-keyword\">from<\/span> pyspark.sql.functions <span class=\"hljs-keyword\">import<\/span> *<br \/>\n<span class=\"hljs-keyword\">from<\/span> pyspark.sql.types <span class=\"hljs-keyword\">import<\/span> *<\/p>\n<p>accountname=<span class=\"hljs-string\">&#8220;bentegostg&#8221;<\/span><br \/>\nsourcecontainer=<span class=\"hljs-string\">&#8220;raw&#8221;<\/span><br \/>\nLinkedService=<span class=\"hljs-string\">&#8220;bentego-synapse-ws-WorkspaceDefaultStorage&#8221;<\/span><br \/>\nsourceFile_location=<span class=\"hljs-string\">&#8220;ingest&#8221;<\/span><br \/>\ndestinationcontainer=<span class=\"hljs-string\">&#8220;refined&#8221;<\/span><\/p>\n<p>spark.conf.<span class=\"hljs-built_in\">set<\/span>(<span class=\"hljs-string\">&#8220;spark.storage.synapse.linkedServiceName&#8221;<\/span>,LinkedService)<br \/>\nspark.conf.<span class=\"hljs-built_in\">set<\/span>(<span class=\"hljs-string\">&#8220;fs.azure.account.oauth.provider.typ&#8221;<\/span>,<span class=\"hljs-string\">&#8220;com.microsoft.azure.synapse.tokenlibrary.LinkedServiceBasedTokenProvider&#8221;<\/span>)<br \/>\nspark.conf.<span class=\"hljs-built_in\">set<\/span>(<span class=\"hljs-string\">&#8220;spark.sql.parquet.writeLegacyFormat&#8221;<\/span>,<span class=\"hljs-string\">&#8220;true&#8221;<\/span>)<\/p>\n<p>SongCustomSchema = StructType([<br \/>\nStructField(<span class=\"hljs-string\">&#8220;song_id&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;song_name&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;duration_ms&#8221;<\/span>, LongType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;url&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;popularity&#8221;<\/span>, LongType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;song_added&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;album_id&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;artist_id&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>)<br \/>\n]<br \/>\n)<\/p>\n<p>song_df = spark \\<br \/>\n.read \\<br \/>\n.schema(SongCustomSchema) \\<br \/>\n.parquet(<span class=\"hljs-string\">f&#8221;abfss:\/\/<span class=\"hljs-subst\">{sourcecontainer}<\/span>@<span class=\"hljs-subst\">{accountname}<\/span>.dfs.core.windows.net\/<span class=\"hljs-subst\">{sourceFile_location}<\/span>\/2023-05-29_song_ds.parquet&#8221;<\/span>)<\/p>\n<p>song_df = song_df \\<br \/>\n.withColumn(<span class=\"hljs-string\">&#8220;duration_ms&#8221;<\/span>,col(<span class=\"hljs-string\">&#8220;duration_ms&#8221;<\/span>).cast(IntegerType())) \\<br \/>\n.withColumn(<span class=\"hljs-string\">&#8220;popularity&#8221;<\/span>,col(<span class=\"hljs-string\">&#8220;popularity&#8221;<\/span>).cast(IntegerType())) \\<br \/>\n.drop(col(<span class=\"hljs-string\">&#8220;song_added&#8221;<\/span>))<\/p>\n<p>AlbumCustomSchema = StructType([<br \/>\nStructField(<span class=\"hljs-string\">&#8220;album_id&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;name&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;album_release_date&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;album_total_tracks&#8221;<\/span>, LongType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;album_url&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;release_date&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>)<br \/>\n]<br \/>\n)<\/p>\n<p>album_df = spark \\<br \/>\n.read \\<br \/>\n.schema(AlbumCustomSchema) \\<br \/>\n.parquet(<span class=\"hljs-string\">f&#8221;abfss:\/\/<span class=\"hljs-subst\">{sourcecontainer}<\/span>@<span class=\"hljs-subst\">{accountname}<\/span>.dfs.core.windows.net\/<span class=\"hljs-subst\">{sourceFile_location}<\/span>\/2023-05-29_album_ds.parquet&#8221;<\/span>)<\/p>\n<p>album_df = album_df \\<br \/>\n.withColumn(<span class=\"hljs-string\">&#8220;album_total_tracks&#8221;<\/span>,col(<span class=\"hljs-string\">&#8220;album_total_tracks&#8221;<\/span>).cast(IntegerType())) \\<br \/>\n.withColumn(<span class=\"hljs-string\">&#8220;album_release_date&#8221;<\/span>,to_date(col(<span class=\"hljs-string\">&#8220;album_release_date&#8221;<\/span>),<span class=\"hljs-string\">&#8220;yyyy-MM-dd&#8221;<\/span>)) \\<br \/>\n.drop(<span class=\"hljs-string\">&#8220;release_date&#8221;<\/span>)<\/p>\n<p>ArtistCustomSchema = StructType([<br \/>\nStructField(<span class=\"hljs-string\">&#8220;artist_id&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;artist_name&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\nStructField(<span class=\"hljs-string\">&#8220;external_url&#8221;<\/span>, StringType(), <span class=\"hljs-literal\">True<\/span>),<br \/>\n]<br \/>\n)<\/p>\n<p>artist_df = spark \\<br \/>\n.read \\<br \/>\n.schema(ArtistCustomSchema) \\<br \/>\n.parquet(<span class=\"hljs-string\">f&#8221;abfss:\/\/<span class=\"hljs-subst\">{sourcecontainer}<\/span>@<span class=\"hljs-subst\">{accountname}<\/span>.dfs.core.windows.net\/<span class=\"hljs-subst\">{sourceFile_location}<\/span>\/2023-05-29_artist_ds.parquet&#8221;<\/span>)<\/p>\n<p>album_df.write \\<br \/>\n.mode(<span class=\"hljs-string\">&#8220;overwrite&#8221;<\/span>) \\<br \/>\n.<span class=\"hljs-built_in\">format<\/span>(<span class=\"hljs-string\">&#8220;parquet&#8221;<\/span>) \\<br \/>\n.option(<span class=\"hljs-string\">&#8220;header&#8221;<\/span>,<span class=\"hljs-string\">&#8220;true&#8221;<\/span>) \\<br \/>\n.option(<span class=\"hljs-string\">&#8220;inferSchema&#8221;<\/span>,<span class=\"hljs-string\">&#8220;true&#8221;<\/span>) \\<br \/>\n.save(<span class=\"hljs-string\">f&#8221;abfss:\/\/<span class=\"hljs-subst\">{destinationcontainer}<\/span>@<span class=\"hljs-subst\">{accountname}<\/span>.dfs.core.windows.net\/album\/&#8221;<\/span>)<\/p>\n<p>artist_df.write \\<br \/>\n.mode(<span class=\"hljs-string\">&#8220;overwrite&#8221;<\/span>) \\<br \/>\n.<span class=\"hljs-built_in\">format<\/span>(<span class=\"hljs-string\">&#8220;parquet&#8221;<\/span>) \\<br \/>\n.option(<span class=\"hljs-string\">&#8220;header&#8221;<\/span>,<span class=\"hljs-string\">&#8220;true&#8221;<\/span>) \\<br \/>\n.option(<span class=\"hljs-string\">&#8220;inferSchema&#8221;<\/span>,<span class=\"hljs-string\">&#8220;true&#8221;<\/span>) \\<br \/>\n.save(<span class=\"hljs-string\">f&#8221;abfss:\/\/<span class=\"hljs-subst\">{destinationcontainer}<\/span>@<span class=\"hljs-subst\">{accountname}<\/span>.dfs.core.windows.net\/artist\/&#8221;<\/span>)<\/p><\/blockquote>\n<p id=\"f874\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\"><strong class=\"kn ew\">Spark Pool<\/strong>\u2019u olu\u015fturduktan sonra\u00a0<strong class=\"kn ew\">Developer<\/strong>\u00a0sekmesinden\u00a0<strong class=\"kn ew\">Notebook<\/strong>\u00a0olu\u015fturarak yukar\u0131daki g\u00f6rm\u00fc\u015f oldu\u011funuz kodlar\u0131 yaz\u0131yoruz. Normal\u00a0<strong class=\"kn ew\">PySpark\u00a0<\/strong>kodlar\u0131m\u0131z\u0131 yazarak verinin d\u00fczg\u00fcn ve temizlenmi\u015f halini yine Azure Data Lake \u00fczerindeki belirti\u011fimiz dizinlere yolluyoruz.<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*39N8ysmt7feQwyJ5V0fxDQ.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*BbXtnUXGfKEb53uYp6J6GA.png\" \/><\/p>\n<p id=\"7625\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Kontrol etti\u011fimizde verilerin ba\u015far\u0131l\u0131 \u015fekilde dizinlere yaz\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rmekteyiz.<\/p>\n<p id=\"df95\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Yukar\u0131da olu\u015fturdu\u011fumuz Notebook\u2019u\u00a0<strong class=\"kn ew\">Data Factory\u00a0<\/strong>\u00fczerinde olu\u015fturdu\u011fumuz Data Pipeline i\u00e7erisinden \u00e7a\u011f\u0131rmak i\u00e7in\u00a0<strong class=\"kn ew\">Azure Data Factory\u2019<\/strong>i servisine\u00a0<strong class=\"kn ew\">Synapse Administrator<\/strong>\u00a0yetkisi vermemiz gerekli.<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*49enApMU9bNgnLjt50o99A.png\" \/><\/p>\n<p data-selectable-paragraph=\"\">\u015eimdi\u00a0<strong class=\"kn ew\">Azure Data Factory<\/strong>\u00a0k\u0131sm\u0131na gidirek<strong class=\"kn ew\">\u00a0Synapse<\/strong>\u00a0k\u0131sm\u0131nda olu\u015fturdu\u011fumuz Notebook\u2019u ba\u011flanabilmesi i\u00e7in yeni bir\u00a0<strong class=\"kn ew\">Linked Service<\/strong>\u00a0olu\u015ftural\u0131m.<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*VriGQ6qGw3nLwjd6qKT2BA.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:839\/1*-F2Q6NTzoozfpgEf-kBChA.png\" \/><\/p>\n<p data-selectable-paragraph=\"\">Ba\u015far\u0131l\u0131 \u015fekilde ba\u011flant\u0131m\u0131z\u0131 olu\u015fturduk. Data Pipeline olu\u015ftururak Notebook\u2019u birde oradan \u00e7a\u011f\u0131ral\u0131m.<\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*A5ln2q2IS_sXV-7GK5348w.png\" \/><\/p>\n<p data-selectable-paragraph=\"\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*z5AdNLLvh_E52rgF4fkjMQ.png\" \/><\/p>\n<p id=\"fd32\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">Data Pipeline\u2019\u0131 \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6rmekteyiz.<\/p>\n<p id=\"2e0e\" class=\"pw-post-body-paragraph kl km ev kn b ko kp kq kr ks kt ku kv kw kx ky kz la lb lc ld le lf lg lh li eo bj\" style=\"text-align: left;\" data-selectable-paragraph=\"\">\u00c7al\u0131\u015fan\u00a0<strong class=\"kn ew\">Pyspark Job<\/strong>\u2019\u0131m\u0131z temizlenmi\u015f ve d\u00f6n\u00fc\u015ft\u00fcr\u00fclm\u00fc\u015f veriyi ba\u015fka bir dizine kaydetmi\u015f oldu. Bu veri setlerini \u015fimdi de\u00a0<strong class=\"kn ew\">Azure SQL Database<\/strong>\u00a0k\u0131sm\u0131nda olu\u015fturdu\u011fumuz SpotifyDB\u2019sinin alt\u0131nda tablolar olu\u015fturarak oraya aktaraca\u011f\u0131z.\u00a0<strong class=\"kn ew\">Data Factory<\/strong>\u00a0servisinin\u00a0<strong class=\"kn ew\">Azure SQL Database<\/strong>\u00a0servisine eri\u015febilmesi i\u00e7in a\u015fa\u011f\u0131daki ayar\u0131 yapmal\u0131s\u0131n\u0131z.<\/p>\n<div class=\"ls lt go lu bg lv\" style=\"text-align: left;\" tabindex=\"0\" role=\"button\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*yqixhxVVChB9h3woiEyRQw.png\" \/><\/div>\n<div tabindex=\"0\" role=\"button\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:852\/1*NGH5vRM1_lyGX24T1kn-jw.png\" \/><\/div>\n<div tabindex=\"0\" role=\"button\"><\/div>\n<div style=\"text-align: left;\" tabindex=\"0\" role=\"button\">Ba\u015far\u0131l\u0131 \u015fekilde ba\u011flant\u0131y\u0131 sa\u011flam\u0131\u015f olduk. \u015eimdi <strong>Azure SQL Database<\/strong> aktar\u0131m i\u015flemini ger\u00e7ekle\u015ftirecek olan Data Pipeline\u2019\u0131 olu\u015fturabiliriz.<\/div>\n<div tabindex=\"0\" role=\"button\"><\/div>\n<div tabindex=\"0\" role=\"button\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*6IasbAB6XMCUpAbxl43bIw.png\" \/><\/div>\n<div tabindex=\"0\" role=\"button\"><\/div>\n<div tabindex=\"0\" role=\"button\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*OflbjbQH_30dCiRL4qck_w.png\" \/><\/div>\n<div tabindex=\"0\" role=\"button\"><\/div>\n<div style=\"text-align: left;\" tabindex=\"0\" role=\"button\">Olu\u015fturdu\u011fumuz Data Pipeline yukar\u0131daki gibidir ve \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda da hata almadan i\u015flemi ger\u00e7ekle\u015ftirdi\u011fini g\u00f6rmekteyiz. Gelin bir de ilgili DB\u2019miz alt\u0131nda tablolar olu\u015fmu\u015f mu ona bir bakal\u0131m.<\/div>\n<div tabindex=\"0\" role=\"button\"><\/div>\n<div tabindex=\"0\" role=\"button\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/v2\/resize:fit:1050\/1*1QL0f3_NXqTNeeMvng6nOQ.png\" \/><\/div>\n<div tabindex=\"0\" role=\"button\"><\/div>\n<p><!--more--><\/p>\n<div tabindex=\"0\" role=\"button\">Evet istedi\u011fimiz tablolar ba\u015far\u0131l\u0131 bir \u015fekilde olu\u015fmu\u015f ve i\u00e7erisindeki veriler istedi\u011fimiz \u015fekilde ve tipte gelmi\u015f g\u00f6z\u00fck\u00fcyor.<\/div>\n<p>Umar\u0131m sizler i\u00e7in faydal\u0131 bir yaz\u0131 olmu\u015ftur. Herhangi bir sorunuz veya \u00f6neriniz var ise benimle ileti\u015fime ge\u00e7ebilirsiniz. Te\u015fekk\u00fcrler, g\u00f6r\u00fc\u015fmek \u00fczere \ud83d\udc4b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Merhabalar bu yaz\u0131mda sizlere Bulut Servis Sa\u011flay\u0131c\u0131lar\u0131ndan olan\u00a0Azure\u00a0\u00fczerinde bir\u00a0Data Pipeline\u00a0olu\u015fturma s\u00fcrecini anlataca\u011f\u0131m. Gelin isterseniz ilk \u00f6nce projemizin mimarisine bakal\u0131m. Mimarimiz yukar\u0131da g\u00f6rm\u00fc\u015f [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1010,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-5196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Azure \u00fczerinde Data Pipeline Olu\u015fturma - Bentego<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Azure \u00fczerinde Data Pipeline Olu\u015fturma - Bentego\" \/>\n<meta property=\"og:description\" content=\"Merhabalar bu yaz\u0131mda sizlere Bulut Servis Sa\u011flay\u0131c\u0131lar\u0131ndan olan\u00a0Azure\u00a0\u00fczerinde bir\u00a0Data Pipeline\u00a0olu\u015fturma s\u00fcrecini anlataca\u011f\u0131m. Gelin isterseniz ilk \u00f6nce projemizin mimarisine bakal\u0131m. Mimarimiz yukar\u0131da g\u00f6rm\u00fc\u015f [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Bentego\" \/>\n<meta property=\"article:published_time\" content=\"2023-05-30T08:04:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-20T16:09:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-82__.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bentego\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bentego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/\"},\"author\":{\"name\":\"Bentego\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#\\\/schema\\\/person\\\/0348418b7b0cbca83fdd7a899d54821e\"},\"headline\":\"Azure \u00fczerinde Data Pipeline Olu\u015fturma\",\"datePublished\":\"2023-05-30T08:04:47+00:00\",\"dateModified\":\"2025-10-20T16:09:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/\"},\"wordCount\":1753,\"publisher\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bentego.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Frame-82__.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/\",\"url\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/\",\"name\":\"Azure \u00fczerinde Data Pipeline Olu\u015fturma - Bentego\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/bentego.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Frame-82__.png\",\"datePublished\":\"2023-05-30T08:04:47+00:00\",\"dateModified\":\"2025-10-20T16:09:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#primaryimage\",\"url\":\"https:\\\/\\\/bentego.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Frame-82__.png\",\"contentUrl\":\"https:\\\/\\\/bentego.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/Frame-82__.png\",\"width\":2400,\"height\":1600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/azure-uzerinde-data-pipeline-olusturma\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bentego.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Azure \u00fczerinde Data Pipeline Olu\u015fturma\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/bentego.com\\\/en\\\/\",\"name\":\"Bentego\",\"description\":\"Turning data into enterprise value\",\"publisher\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/bentego.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#organization\",\"name\":\"Bentego\",\"url\":\"https:\\\/\\\/bentego.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/bentego.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo-bentego.svg\",\"contentUrl\":\"https:\\\/\\\/bentego.com\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/logo-bentego.svg\",\"width\":433,\"height\":109,\"caption\":\"Bentego\"},\"image\":{\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bentego.com\\\/en\\\/#\\\/schema\\\/person\\\/0348418b7b0cbca83fdd7a899d54821e\",\"name\":\"Bentego\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Azure \u00fczerinde Data Pipeline Olu\u015fturma - Bentego","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/","og_locale":"en_US","og_type":"article","og_title":"Azure \u00fczerinde Data Pipeline Olu\u015fturma - Bentego","og_description":"Merhabalar bu yaz\u0131mda sizlere Bulut Servis Sa\u011flay\u0131c\u0131lar\u0131ndan olan\u00a0Azure\u00a0\u00fczerinde bir\u00a0Data Pipeline\u00a0olu\u015fturma s\u00fcrecini anlataca\u011f\u0131m. Gelin isterseniz ilk \u00f6nce projemizin mimarisine bakal\u0131m. Mimarimiz yukar\u0131da g\u00f6rm\u00fc\u015f [&hellip;]","og_url":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/","og_site_name":"Bentego","article_published_time":"2023-05-30T08:04:47+00:00","article_modified_time":"2025-10-20T16:09:18+00:00","og_image":[{"width":2400,"height":1600,"url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-82__.png","type":"image\/png"}],"author":"Bentego","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bentego","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#article","isPartOf":{"@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/"},"author":{"name":"Bentego","@id":"https:\/\/bentego.com\/en\/#\/schema\/person\/0348418b7b0cbca83fdd7a899d54821e"},"headline":"Azure \u00fczerinde Data Pipeline Olu\u015fturma","datePublished":"2023-05-30T08:04:47+00:00","dateModified":"2025-10-20T16:09:18+00:00","mainEntityOfPage":{"@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/"},"wordCount":1753,"publisher":{"@id":"https:\/\/bentego.com\/en\/#organization"},"image":{"@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#primaryimage"},"thumbnailUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-82__.png","articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/","url":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/","name":"Azure \u00fczerinde Data Pipeline Olu\u015fturma - Bentego","isPartOf":{"@id":"https:\/\/bentego.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#primaryimage"},"image":{"@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#primaryimage"},"thumbnailUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-82__.png","datePublished":"2023-05-30T08:04:47+00:00","dateModified":"2025-10-20T16:09:18+00:00","breadcrumb":{"@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#primaryimage","url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-82__.png","contentUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-82__.png","width":2400,"height":1600},{"@type":"BreadcrumbList","@id":"https:\/\/bentego.com\/en\/azure-uzerinde-data-pipeline-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bentego.com\/en\/"},{"@type":"ListItem","position":2,"name":"Azure \u00fczerinde Data Pipeline Olu\u015fturma"}]},{"@type":"WebSite","@id":"https:\/\/bentego.com\/en\/#website","url":"https:\/\/bentego.com\/en\/","name":"Bentego","description":"Turning data into enterprise value","publisher":{"@id":"https:\/\/bentego.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bentego.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/bentego.com\/en\/#organization","name":"Bentego","url":"https:\/\/bentego.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/bentego.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg","contentUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg","width":433,"height":109,"caption":"Bentego"},"image":{"@id":"https:\/\/bentego.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/bentego.com\/en\/#\/schema\/person\/0348418b7b0cbca83fdd7a899d54821e","name":"Bentego"}]}},"_links":{"self":[{"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/posts\/5196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/comments?post=5196"}],"version-history":[{"count":2,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/posts\/5196\/revisions"}],"predecessor-version":[{"id":5662,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/posts\/5196\/revisions\/5662"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/media\/1010"}],"wp:attachment":[{"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/media?parent=5196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/categories?post=5196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bentego.com\/en\/wp-json\/wp\/v2\/tags?post=5196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}