GitHub'dan Snowflake'e Özel Python Paketlerini Dağıtma

Nov 30 2022
GÜNCELLEME: 7 Kasım 2022 itibariyle. Python için Snowpark GA'dır, bu nedenle yüklemek PyPi aracılığıyla kar tanesi-snowpark-python pip kurulumu kadar kolaydır.

GÜNCELLEME: 7 Kasım 2022 itibariyle. Python için Snowpark GA'dır, bu nedenle yüklemek PyPipip install snowflake-snowpark-python aracılığıyla kadar kolaydır .

genel bakış

Snowpark, geliştiricilere Python, Java, Scala ve JavaScript gibi dillerde kod yazarak Snowflake platformunun işlevselliğini genişletmeleri için bir yol sağlar. Bu blogda, GitHub Eylemlerini kullanarak bir GitHub deposundan özel saf Python paketlerini Snowflake'e dağıtmanın bir yolunu inceleyeceğiz .

Daha da önemlisi, bu paketler Snowpark Python'da Kullanıcı Tanımlı İşlevler (UDF'ler) oluşturmak için kullanıldığında , bu yaklaşım, özel kodunuzu aynı anda ve manuel müdahale olmaksızın sihirli bir şekilde birkaç UDF'de korumayı ve dağıtmayı kolaylaştırır. Bu kurulumun vurguladığı diğer bir avantaj, özel paketlerin, paketi Snowflake'e yükleyen ve güncellenmiş özel paketi kullanan UDF'lerin adlarını görüntüleyen komut dosyasından ayrılmasıdır.

Kullanıcı Tanımlı İşlev

Tüm akışın nasıl bir araya geldiğini göstermek için Snowpark Python'daki bu basit UDF'yi ele alalım. (Bu komut dosyası Snowsight'ta çalıştırılır .)

Senaryo Notları

  • Python paketi do_something_cool.py bir bağımlılık olarak eklenir — satır 6 . imports deyiminin tüm yolu içerdiğini unutmayın ; sahnenin adı ve dosya adı
  • Bu paket daha sonra içe aktarılır ( satır 9 ) ve bu UDF'ye iletilen parametreyi geçerek tebrikler() yöntemi çağrılır ( satır 11 )

SELECT greet_me('Dash');

Hello, Dash! How are you doing today? It's great to see you today!

Kurulum: GitHub Deposu 1

Diyelim ki sizin ve ekip üyelerinizin katkıda bulunduğu ve işbirliği yaptığı bu Python paketini sürdürdüğünüz bir GitHub deponuz var.

İşte “ havalı bir şeyler yapın

Bu depo aynı zamanda GitHub Eylemlerini kuracağınız yerdir .

GitHub Eylemleri iş akışı dosyası ( iş akışı ayrıntıları aşağıdadır ) şöyle görünür:

İş akışı ayrıntıları

  • Tetikleme Olayı: Kod güncellendiğinde ana şubeye basıldığında
  • İş Akışı Adımları:

— 2. Güncellenmiş paket kodunu dağıtmak için gereken bağımlılık isteklerini ve snowflake-connector-python'u kurun

— 3. Güncellenmiş özel kodu Snowflake'e yükleyecek betiği indirin ( Repo 2'den — aşağıya bakın )

— 4. GitHub Sırlarında saklanan kurulum ortamı değişkenleri ( veritabanı, ambar, şema, kullanıcı, parola ve rol ). Bu değişkenler, Snowflake'e bağlanmak için betikte ( 3. adımda indirilen) Snowflake Python Connector tarafından kullanılacaktır.

— 5. Güncellenmiş kodu dağıtmak için betiği çalıştırın ( 3. adımda indirilen )

[GitHub'daki Kod : Örnek özel paket | GitHub Eylemleri iş akışı dosyası ]

Kurulum: GitHub Deposu 2

Bu depo, Repo 1'deki ana dalda pakette güncellemeler yapıldığında Repo 1'deki GitHub Actions iş akışı kurulumundan indirilen ve çalıştırılan Python betiğini (aşağıdaki ayrıntılara bakın) içerir .

İşte betiğin nasıl görüneceği:

Komut dosyası adımları

— 1. Snowflake Python Connector kullanarak Snowflake'e ve GitHub Secrets kullanılarak ayarlanan ortam değişkenlerine bağlanın

— 2. Güncellenecek paketlerin listesini indirin (aşağıdaki JSON formatına bakın)

— 3. Her paket için, Repo 1'den ana şubeden en son sürümü indirin ve Snowflake aşamasına yükleyin

— 4. Tüm UDF'ler arasında geçiş yapın, içe aktarmalarını inceleyin ve güncellenmiş paketi kullanan UDF'lerin adlarını yazdırın

Paket Listesi

Bu depo ayrıca update_packages.py betiği çalıştırıldığında güncellenecek paketlerin bir listesini ( yukarıdaki 2. adımda atıfta bulunulan) içeren bir JSON dosyası içerir .

İşte dosya formatı:

Not : JSON dosyasındaki aşama , Snowflake'te dosyanın yüklendiği aşamayı ifade eder.

Test yapmak

Test etmek için Repo 1'de do_something_cool.py dosyasını güncelleyin ( örneğin, karşılama mesajını “Hoş geldiniz, gününüz nasıl gidiyor?” olarak değiştirin) ve değişiklikleri ana şubeye aktarın. Bu noktada bir yapı başlangıcı görmelisiniz ve başarılı olursa (örn. kod/ sözdizimi doğru, başvurulan tüm dosyalar ve yollar mevcut, Snowflake'e bağlanmak için bağlantı parametreleri geçerli, vb. ), o zaman yapı çıktısını görmelisiniz buna benzer:

Ardından, bu SQL'i yeniden çalıştırmak…

SELECT greet_me('DASH');

Hello, Dash! Welcome, how is your day going?

Bu kadar!

Zaman ayırdığınız için teşekkürler ve özellikle Snowpark çevresinde tanıtım videoları, kod parçacıkları ve diğer ilginç yapıları paylaştığım Twitter ve LinkedIn'de beni takip etmekten çekinmeyin .