Snowpark tarjoaa tehokkaita työkaluja datan käsittelyyn Snowflake-ympäristössä Pythonin avulla. Ensimmäinen askel Snowpark-ympäristön käyttöönotossa on Snowflake-asennus ja yhteyden muodostaminen Snowpark-sessioon. Tässä käsitellään, miten asennus ja yhteyden muodostaminen suoritetaan, sekä kuinka aloittaa datan käsittely Snowpark DataFrame -operaatioilla.

Snowparkin asennus edellyttää Pythonin version 3.8 tai uudemman. Asennus suoritetaan komennolla:

nginx
pip install snowflake-snowpark-python

Asennuksen jälkeen voidaan tarkistaa, että Snowpark on asennettu oikein komennolla:

sql
pip show snowflake-snowpark-python

Snowflake-tilissä täytyy luoda uusi tietokanta ja skeema (tai käyttää olemassa olevia), ennen kuin Snowparkia voidaan käyttää:

pgsql
create database snowpark_ch7;
create schema output;

Tämän jälkeen on aika yhdistää Python-sovellus Snowflakeen. Voit luoda uuden Python-tiedoston, kuten ch7_snowpark.py, ja liittää siihen seuraavan koodin, joka hoitaa autentikoinnin ja yhteyden muodostamisen:

python
from snowflake.snowpark import Session def initiateSession(): connection_parameters = { "account": "<account>", "user": "<user>", "password": "<password>", "role": "Accountadmin", "warehouse": "compute_wh", "database": "snowpark_ch7", "schema": "output" } session = Session.builder.configs(connection_parameters).create() return session session = initiateSession() print(session.sql("SELECT current_version()").collect()) # Verify connection

Tässä koodissa määritellään yhteyden muodostamiseen tarvittavat parametrit, kuten tilitiedot, rooli ja varasto. current_version()-komento palauttaa Snowflake-tietokannan version, mikä auttaa varmistamaan, että yhteys toimii oikein.

Kun yhteys on onnistuneesti muodostettu, voidaan siirtyä datan käsittelyyn. Snowpark tarjoaa tehokkaita tapoja käsitellä dataa DataFramejen avulla, jotka mahdollistavat SQL-tyyppisten operaatioiden suorittamisen Pythonissa.

Esimerkiksi, seuraavalla komennolla voidaan luoda DataFrame CUSTOMER-taulusta:

python
df = session.table("SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER")
df.show()

Snowparkin DataFrame-operaatiot mahdollistavat monia hyödyllisiä toimintoja, kuten suodattamista, aggregointia, järjestämistä ja liittämistä. Esimerkiksi, jos haluamme suodattaa tilit, joiden saldo on suurempi kuin 5000 ja pienempi kuin 10000, voimme käyttää seuraavaa koodia:

python
filtered_df = df.filter((df["C_ACCTBAL"] > 5000) & (df["C_ACCTBAL"] < 10000))

Aggregation voidaan suorittaa esimerkiksi laskemalla keskiarvo tietystä sarakkeesta:

python
aggregated_df = df.group_by("C_NATIONKEY").agg({"C_ACCTBAL": "avg"})

Tietojen järjestäminen laskevassa järjestyksessä tapahtuu seuraavasti:

python
ordered_df = df.sort("C_ACCTBAL", ascending=False)

Usein datan yhdistäminen on tarpeen eri tauluista perustuviin operaatioihin. Snowpark tukee taulujen yhdistämistä, kuten alla olevassa esimerkissä:

python
orders_df = session.table("SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS") joined_df = df.join(orders_df, df["C_CUSTKEY"] == orders_df["O_CUSTKEY"])

Lisäksi voidaan käyttää ikkunafunktioita, jotka mahdollistavat laskentojen suorittamisen riviin liittyvän tietojoukon yli. Esimerkiksi, juoksevan summan laskeminen voidaan tehdä seuraavasti:

python
from snowflake.snowpark.window import Window
from snowflake.snowpark.functions import sum, col window = Window.order_by(col("O_ORDERDATE")) running_total_df = orders_df.with_column("running_total", sum(col("O_TOTALPRICE")).over(window)) running_total_df.show()

Tietoja voidaan tallentaa Snowflake-tietokannan tauluun komennolla:

python
running_total_df.write.mode("overwrite").save_as_table("orders_running_total")

Snowpark tukee myös käyttäjä määriteltyjen funktioiden (UDF) luomista Pythonissa, Java:ssa tai Scalassa. Pythonin avulla voidaan luoda UDF-funktio, kuten alla esitetty alennuslaskentafunktio:

python
def calculate_discount(price, discount):
return price * (1 - discount / 100)

Tämän jälkeen rekisteröimme funktion Snowflakeen ja käytämme sitä SQL-kyselyssä:

python
from snowflake.snowpark.types import FloatType session.udf.register( func=calculate_discount, name="calculate_discount_udf", input_types=[FloatType(), FloatType()], return_type=FloatType() ) result_df = session.sql(""" SELECT O_CUSTKEY, calculate_discount_udf(O_TOTALPRICE, 10) AS discounted_price FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS """) result_df.show()

Snowpark tukee myös säilöttyjen proseduurien luomista, joiden avulla voidaan kapseloida monimutkaisempia toimintoja ja suorittaa niitä yhdessä yksikössä. Esimerkiksi, tietojen kopioiminen yhdestä taulusta toiseen voidaan suorittaa seuraavasti:

python
def copy_data(session: Session, source_table: str, target_table: str) -> str:
source_df = session.table(source_table) source_df.write.save_as_table(target_table, mode="overwrite") return f"Data successfully copied from {source_table} to {target_table}" session.sproc.register( func=copy_data, name="copy_data_sproc", input_types=[StringType(), StringType()], return_type=StringType(), packages=["snowflake-snowpark-python"] )

Snowpark mahdollistaa myös koneoppimismallien integroimisen suoraan Snowflake-ympäristöön. Esimerkiksi, scikit-learn-kirjaston avulla voidaan kouluttaa malli ja käyttää sitä reaaliaikaisiin ennusteisiin Snowparkissa:

python
from sklearn.linear_model import LinearRegression
import pandas as pd X = pd.DataFrame([1, 2, 3, 4, 5])
y = pd.DataFrame([2, 4, 5, 4, 5])
model = LinearRegression() model.fit(X, y)

Tällainen integraatio mahdollista

Miksi Snowflake on ratkaisu nykyaikaisille tietovarastointitarpeille?

Tieto on tänä päivänä elintärkeää liiketoiminnalle, ja sen hallintaan sekä analysointiin tarvitaan tehokkaita ja skaalautuvia ratkaisuja. Perinteiset tietovarastot ovat usein pullonkauloja organisaatioiden analytiikka- ja raportointitarpeille. Tämä johtuu siitä, että ne perustuvat vanhentuneeseen arkkitehtuuriin, jossa tietovarasto ja laskentateho ovat tiukasti sidoksissa toisiinsa, rajoittaen samalla tehokasta käyttöä. Snowflake tarjoaa ratkaisun tähän haasteeseen, ja sen pilvipohjainen arkkitehtuuri mahdollistaa tietovarastoinnin ja laskennan erottamisen toisistaan, jolloin resurssit voivat skaalautua joustavasti tarpeen mukaan ilman, että se aiheuttaa pullonkauloja. Tämä ei ainoastaan paranna suorituskykyä, vaan myös mahdollistaa organisaatioille nopean ja kustannustehokkaan skaalautumisen.

Snowflake erottuu muista pilvipohjaisista tietovarastointiratkaisuista sen tarjoamalla lähes rajattomalla laskentateholla ja tallennuskapasiteetilla. Käyttäjät voivat luoda virtuaalisia tietovarastoja, jotka mahdollistavat erillisten tiimien ja osastojen työskentelyn ilman, että toisten käyttäjien tai prosessien suorituskykyä heikennetään. Esimerkiksi, jos organisaatio pyörittää suuria ETL (Extract-Transform-Load) prosesseja yön aikana, se voi luoda oman virtuaalisen varastonsa, joka ei vaikuta muiden osastojen työnkulkuun. Samalla markkinointiosasto voi suorittaa monimutkaisia kyselyjä ja analysoida attribuutiomalleja ilman suorituskykyongelmia. Tämä skaalautuvuus tuo suorituskyvyn etuja, joita perinteiset tietovarastot eivät voi tarjota.

Snowflaken pilvipohjainen malli tuo myös merkittäviä kustannusetuja. Koska organisaatio maksaa vain käytetystä kapasiteetista, ei ole tarvetta investoida kalliin laitteistoon, joka saattaa jäädä käyttämättömäksi, tai ennakoida tulevia kuormituksia. Tämä malli on täysin riippumaton ennakoiduista kuormituksista ja mahdollistaa kustannusten optimoinnin vastaavaan käyttöön.

Snowflaken arkkitehtuuri ei pelkästään ratkaise skaalautuvuusongelmia, vaan tuo esiin myös monia ainutlaatuisia ominaisuuksia, jotka eivät ole saatavilla perinteisissä pilvialustoissa tai paikan päällä toimivissa tietovarastoratkaisuissa. Näihin kuuluu muun muassa tietojen jakaminen, ajamatka (time travel), tietokannan replikaatio ja vikasietoisuus, nollan kopion kloonaus sekä useita muita ominaisuuksia, joista kerrotaan tässä kirjassa.

Mitä Snowflake siis tuo mukanaan? Ennen kaikkea se mahdollistaa tietovarastoinnin ja analytiikan vapauden. Perinteisissä ympäristöissä organisaatioiden oli pakko tehdä suuria kompromisseja suorituksen, skaalautuvuuden ja kustannusten välillä. Snowflake poistaa nämä kompromissit ja tarjoaa organisaatioille mahdollisuuden kasvaa ilman, että tekniset rajoitteet muodostavat esteen. Tämä on eräänlainen demokratisointi datan ja liiketoiminnan analytiikan suhteen.

Pilvitekniikan avulla Snowflake luo pohjan koko organisaation tiedon hyödyntämiselle. Usein data on hajautettua eri osastoille, eikä perinteisissä järjestelmissä ole mahdollista pitää kaikkia tiimejä samanaikaisesti tuottavina ilman, että yksi prosessi estää toisen sujuvaa toimintaa. Snowflake mahdollistaa sen, että osastot voivat työskennellä samanaikaisesti, ilman että tarvitsee huolehtia siitä, että yhden osaston analyysit heikentävät toisen työn tehokkuutta. Tämä tuo eräänlaista vapautta, joka aiemmin oli tuntematonta perinteisissä tietovarastoissa.

Tietoturva on toinen alue, jossa Snowflake tuo merkittäviä etuja. Perinteiset ratkaisut voivat olla alttiita monille haavoittuvuuksille, koska tietovaraston ja laskentatehon yhdistäminen lisää riskiä. Snowflake tarjoaa kehittyneitä turvatoimia, kuten yksityiskohtaiset pääsynhallintaominaisuudet ja tiedon salauksen, jotka varmistavat, että data pysyy suojattuna kaikissa olosuhteissa. Tämä on erityisen tärkeää organisaatioille, jotka käsittelevät arkaluonteista tai säädeltyä tietoa.

Lopuksi, Snowflake ei ainoastaan helpota organisaatioiden teknologian hallintaa, vaan myös tarjoaa mahdollisuuden kehittää liiketoimintaa dataan pohjautuvien päätöksenteon mallien kautta. Organisaatiot voivat tarkastella eri liiketoiminta-alueiden suorituskykyä reaaliajassa, luoda syvällisiä ennusteita ja tehdä tietoon perustuvia liiketoimintapäätöksiä. Tämän tyyppinen analytiikka, joka on skaalautuva ja tehokas, on entistä tärkeämpää kilpailussa, jossa nopeus ja tarkkuus ovat avainasemassa.

Kuinka ladata tietoja tehokkaasti Snowflakeen: Bulk-tiedon lataus ja suositukset

Kun olet määrittänyt Snowflake-tietokannan ja varaston, seuraava askel on tietojen lataaminen järjestelmään. Snowflake on suunniteltu käsittelemään tätä prosessia tehokkaasti ja tukee monenlaisia tiedon latausmenetelmiä, -lähteitä ja -formaatteja. Pienempien tietokokonaisuuksien tai alkutestausten yhteydessä voit ladata tietoja suoraan paikallisista tiedostoista Snowflakeen. Kuitenkin, kun tiedon määrä kasvaa, Snowflaken integrointi pilvitallennuspalveluihin, kuten Amazon S3:een, Azure Blob Storageen ja Google Cloud Storageen, tarjoaa selviä etuja. Suora lataus näistä alustoista on erityisen hyödyllistä suurten tietomäärien käsittelyssä, jolloin voit luoda vankkoja ja tehokkaita tiedon käsittelyputkia. Tämä lähestymistapa virtaviivaistaa tiedon tuontiprosessia ja mahdollistaa tiedon työnkulkujen saumatonta integrointia olemassa olevien pilvitallennusratkaisujen kanssa.

Tiedon lataaminen Snowflakeen voidaan jakaa kahteen päämenetelmään: bulk-lataus COPY-komennolla ja jatkuva tiedon lataus Snowpipen avulla. Tässä luvussa keskitymme bulk-lataukseen, joka käsittelee suurten tietomäärien lataamista.

Bulk-tiedon lataaminen on ollut käytössä kauemmin kuin Snowflake itse on ollut olemassa. Monet muut tietokannan hallintajärjestelmät tukevat COPY-komennon käyttöä, ja ei ole yllättävää, että Snowflake tarjoaa samanlaisen tuen. Bulk-latauksen ymmärtämiseksi on tärkeää käsitellä muutamia keskeisiä kysymyksiä, kuten: mikä on bulk-lataus, mistä voimme ladata tietoja, mitkä ovat pakkaus- ja salausvaihtoehdot, ja mitkä tiedostomuodot ovat tuettuja?

Bulk-lataus tarkoittaa suurten tietomäärien tuomista tietokannan tauluun yhdellä kertaa. Tämän prosessin hyödyllisyys on siinä, että se mahdollistaa suurten tietomäärien käsittelyn tehokkaasti ilman, että tiedot lisätään yksi rivi kerrallaan, kuten tavallisessa INSERT-komennossa. Snowflake tukee tiedon lataamista pilvitallennuspalveluista, kuten AWS S3:sta, GCP Cloud Storagesta ja Azure Blob Storagesta. Jos tiedostosi eivät ole vielä pilvessä, voit ladata ne ensin Snowflaken sisäiseen varastointialueeseen, josta ne siirretään edelleen tietokannan tauluihin.

Tiedon lataaminen voidaan tehdä myös pilvessä sijaitsevista tiedostoista, jotka on tallennettu Snowflaken sisäiseen tallennuspaikkaan tai muihin pilvipalveluihin. Näihin kuuluvat AWS S3, GCP Cloud Storage ja Azure Blob Storage, josta tiedot voidaan ladata suoraan käyttäjän määrittämästä säiliöstä.

Tietojen pakkaaminen on tärkeä osa latausprosessia. Snowflake voi automaattisesti tunnistaa useita pakkausmenetelmiä, kuten gzip, bzip2, deflate ja raw_deflate. Jos käytät brotli- tai zstandard-pakkausta, sinun tulee määrittää pakkausmenetelmä erikseen, koska Snowflake ei tue näiden automaattista tunnistamista.

Tiedon salaus on toinen keskeinen osa tietoturvaa. Snowflake salaa tiedostot automaattisesti 128-bittisellä salausavaimella, mutta voit halutessasi aktivoida vahvemman 256-bittisen salauksen. Tiedostojen, jotka on jo salattu ulkopuolisessa pilvitallennuksessa, täytyy olla avain, jolla ne on salattu, ja tämä avain tulee antaa Snowflake-järjestelmälle latausprosessin aikana.

Snowflake tukee monia yleisesti käytettyjä tiedostomuotoja tiedon lataamisessa, mukaan lukien erotetut tiedostot (CSV), JSON, XML, Avro, ORC ja Parquet. Erityisesti JSON, Avro ja Parquet ovat suosittuja puoli-strukturoitujen tietojen lataamiseen. Erityisesti CSV-tiedostoissa on tärkeää käyttää UTF-8-merkistökoodia, mutta muissa tiedostomuodoissa käytetään aina UTF-8-merkistöä.

Kun lataat suuria tietomääriä, on tärkeää valmistella tiedostot oikein. Snowflake suosittelee tietojen jakamista pienempiin osiin, jotta tietoja voidaan käsitellä rinnakkain mahdollisimman tehokkaasti. Yleinen suositus on, että tiedostot olisivat kooltaan 100–250 MB pakattuna. Tällöin tiedostot voidaan jakaa useisiin rinnakkaisiin prosessointitehtäviin, mikä parantaa latausprosessin nopeutta ja tehokkuutta.

Suurempien tiedostojen jakaminen voi auttaa myös skaalautuvuuden parantamisessa. Jos tiedosto on suurempi kuin 3 GB, kannattaa jakaa se pienempiin osiin (esimerkiksi 1 GB tai pienempiin tiedostoihin), koska suuret tiedostot voivat aiheuttaa aikakatkaisuja latausprosessissa. Jos lähdetietokannassa ei ole mahdollisuutta jakaa tiedostoja pienempiin osiin, voit käyttää kolmannen osapuolen työkaluja suurten CSV-tiedostojen jakamiseen.

Erityisesti CSV-tiedostojen valmistelussa on otettava huomioon muutamia tärkeitä asioita. Varmista, että tiedoston rakenne on johdonmukainen ja että kaikki kentät on erotettu oikealla merkillä. Jos tiedostot eivät ole hyvin jäsenneltyjä, Snowflake ei ehkä pysty käsittelemään niitä oikein, mikä hidastaa latausprosessia.

Tietojen tehokas lataaminen Snowflakeen ei ole vain tekninen prosessi vaan myös osa suurempaa datan hallintastrategiaa. On tärkeää valita oikeat tiedostomuodot ja -koko, määrittää oikeat pakkaus- ja salausasetukset ja suunnitella tiedon jakaminen niin, että prosessi on mahdollisimman nopea ja tehokas. Tiedon valmistelu, kuten tiedostojen kokoaminen ja jakaminen, voi vaikuttaa merkittävästi koko latausprosessin tehokkuuteen ja suorituskykyyn, mikä tekee siitä keskeisen osan Snowflake-ympäristön optimointia.