Ես ուզում էի սկսել կիսվել խնդիրների լուծման որոշ լուծումներով, որոնց վրա շատ ժամանակ էի ծախսել՝ հիմնականում ճանապարհին մարդկային կույր սխալների պատճառով: Այս հոդվածում ես կկիսվեմ Python-ում որոշ զվարճալի տվյալներ ստանալով և գրելով: այդ տվյալները սեղանի վրա Snowflake-ում, օգտագործելով պանդաներ և sqlalchemy:

Առաջինը՝ շրջակա միջավայրի կարգավորում և գրադարանների տեղադրում

Ձեզ անհրաժեշտ ցանկացած գրադարան տեղադրելիս օգտագործեք pip install հրամանի տողում կամ տերմինալում (պատուհան կամ mac): Հետևեք ստորև բերված ձևանմուշին, և դուք լավ կլինեք, շատ ժամանակ:

Տերմինալում կամ հրամանի տողում

pip install snowflake-connector-python

կամ եթե դա անում եք jupyter նոթատետրում

!pip install snowflake-connector-python

Ձեր պանդաների միջավայրը կարգավորելը մի բան է, որ ես կարծես հիշում եմ, որ պետք է անեմ միայն փաստից հետո: Սա անհրաժեշտ չէ, բայց երբ ուսումնասիրում եք տվյալները, երբ աշխատում եք ձեր կոդի վրա, կարծում եմ, որ հետևյալ երկու տողերը կարող են օգնել ձեզ համոզվել, որ դուք կարող եք դիտել ձեր բոլոր տվյալները: Դեռ օգտագործեք df.head() կամ df.tail() (կամ խմբագրումներ, ինչպիսիք են df.head(30) կամ df.tail(30)):

pd.set_option('display.max_colwidth', None)
pd.set_option('display.max_columns', None)

Երբ խոսքը վերաբերում է կարդալու/գրելու համար անհրաժեշտ գրադարանները ձյան փաթիլ ներմուծելուն, օգտագործեք հետևյալը

ներմուծել snowflake.connector
snowflake.connector.pandas_tools ներմուծել pd_writer
sqlalchemy import create_engine-ից

Եթե ​​սխալներ եք ստանում, կարող եք տեսնել, թե արդյոք դուք պարզապես տեղադրել եք միայն snowflakeգրադարան հետևյալ pip հրամանով:

pip list (կամ !pip list jupyter notebook-ում)

Եվ եթե դուք սխալ եք ստանում snowflake.connector-ը ներմուծելիս, և տեսնում եք, որ դուք տեղադրել եք snowflake գրադարանը վերը նշված հրամանի միջոցով, ապա տեղահանեք snowflake-ը հետևյալով.

pip uninstall snowflake.connector (կամ !pip-ով jupyter notebook-ում)

Եթե ​​ունեք այլ սխալներ, գրեք ինձ

Yahoo Finance — Տվյալների ստացում

Ինչու չցուցադրել/կիսվել, թե ինչպես կարելի է ստեղծել պանդաների DataFrame-ը Yahoo Finance-ի զվարճալի տվյալների աղբյուրից (մի անհանգստացեք, ես վերջում տրամադրում եմ ամբողջական կոդը):

— — — — — — — — — — — — — — — — ԿՈԴ — — — — — — — — — — — — — — — — —

ներմուծեք պանդա որպես pd

#use գնային տվյալներ կանչելու համար
ներմուծեք yfinance որպես yf

ticker = 'QQQ'
data = pd.DataFrame(yf.download(tickers=ticker, period='2d', interval='5m'))

— — — — — — — — — — — — — — — ՎԵՐՋ ԿՈԴ — — — — — — — — — — — — — — —

Yahoo finance-ն ունի նաև կրիպտոարժույթի գնագոյացում: Օրինակ, եթե դուք Ethereum Classic-ի գնագոյացման տվյալներ ստանաք (խորհրդանիշը ETC), ձեզ միայն պետք է վերևից փոխեք նշիչ փոփոխականը:

ticker = «ETC-USD»

Ստեղծեք Snowflake հաշիվ և կարգավորում

Նախ, ստեղծեք ձյան փաթիլ հաշիվ: Դա հիմնականում հեշտ է.

Snowflake-ում կան 4 տարր, որոնք դուք պետք է ստեղծեք. Բոլորն օգտագործվում են տվյալների կազմակերպման և մուտք գործելու համար: Հետևյալն այն է, թե ինչպես եմ ես մտածում տվյալների բազայի ՊԱՀԱՆՋՎԱԾ կառուցվածքներից յուրաքանչյուրի մասին:

  1. Պահեստ — Այն ռեսուրսը, որն օգտագործում եք (գնացեք small-ի կամ xsmall-ի հետ, քանի որ այն ավելի էժան է): Դուք կարող եք ստեղծել բազմաթիվ պահեստներ տարբեր նպատակների համար, բայց այս գործընթացի համար անհրաժեշտ է միայն մեկը:
  2. Տվյալների բազա - Տվյալների ընտանիք: Հնարավոր է՝ ձեզ չհետաքրքրի, բայց եթե նախատեսում եք օգտագործել ձյան փաթիլը շատ տարբեր տվյալների կամ հաճախորդների միջև, դուք ցանկանում եք ունենալ տարբեր տվյալների բազա յուրաքանչյուր «տվյալների ընտանիքի» համար՝ ինչ էլ որ դա նշանակի ձեզ համար: Սա սկիզբն է, թե ինչպես ենք մենք կազմակերպում մեր տվյալները որոշակի կարգով:
  3. Սխեման. Եթե տվյալների բազաները տվյալների ընտանիք են, ապա սխեմաները կարող եք պատկերացնել որպես անմիջական ընտանիք: Այսպիսով, տվյալները կենտրոնացած են ծնող1/ծնող2, ծնող2/ծնող1 և երեխաների վրա մեկ սխեմայի վրա: Ձեր զարմիկների անմիջական ընտանիքը կարող է լինել իրենց սեփական սխեմայի մեջ:
  4. Աղյուսակ - Եթե սխեմաները անմիջական ընտանիք են, ապա աղյուսակները անհատական ​​տվյալներ են: Այսպիսով, նշեք աղյուսակը, որը հատուկ է ծնող1, ծնող2, երեխա1 և այլն:

Snowflake հաշիվ ստեղծելուց հետո մեզ համար հաջորդ կետը պահեստ ստեղծելն է: Ես խորհուրդ եմ տալիս դա անել Snowflake UI-ում: Դուք դա անում եք՝ սեղմելով տան պատկերակի ներդիրի վրա (սովորաբար վերևի ձախ կողմում) և հասնում եք ադմինիստրատորի բաժին՝ ձեր պահեստը ստեղծելու համար: Հիշեք, որ սա ձեր ռեսուրսն է, որը կօգտագործվի տվյալների հարցումների համար: Ձեր ընտրած և օգտագործած փոքր/մեծ/մեծ ռեսուրսը թարգմանվում է որպես Ձեր ծախսած $/$$/$$$: Անուն տվեք և ընտրեք մանրամասները (հավանաբար, դրա համար պետք չէ անհանգստանալ նախնական ներդիրի մասին):

Այժմ մենք պատրաստ ենք տվյալների ներդիրում ստեղծել տվյալների բազա: Նաև պարզ. Կրկին սեղմելով տան պատկերակը (վերևի ձախ կողմում), այնուհետև տվյալների ներդիրը, այնուհետև սեղմեք +Տվյալների բազա վերևի աջ մասում:

Ձեր տվյալների բազան ստեղծելուց անմիջապես հետո դուք պետք է տեսնեք, որ այն հայտնվում է Տվյալների ներդիրի պատուհանում: Կտտացրեք ձեր տվյալների բազայի վրա և այնուհետև ստեղծեք սխեմա +Schema կոճակով — նորից վերևի աջ կողմում:

Պահեստ, տվյալների բազա և սխեմա ստեղծելուց հետո կարող եք սկսել աշխատանքային թերթիկ: Այստեղ դուք կարող եք ստեղծել ձեր սեղանի հիմքը snowflake UI-ում: Ես նաև ձեզ ցույց կտամ, թե ինչպես դա անել python-ում:

Նույն «տուն» ներդիրում դուք պետք է տեսնեք «Աշխատանքային թերթիկներ» ներդիրի տարբերակը: Այստեղ դուք կկարողանաք սեղմել +Worksheet-ի վրա և ստեղծեք ձեր նոր միայն դատարկ վերնագրի աղյուսակը, որը պատրաստ կլինի python-ով տվյալներ ավելացնելու համար:

Դուք կցանկանաք ժամանակից շուտ իմանալ, թե ինչ սյունակներ և սյունակների տեսակներ եք ավելացնելու ձյան փաթիլ UI-ն օգտագործելիս: Նոր աշխատաթերթի տեսքում դուք կարող եք տեսնել, որ այն ասում է «Տվյալների բազան ընտրված չէ», այնպես որ դուք կցանկանաք ընտրել նախկինում ստեղծված տվյալների բազան և սխեման: Սա պետք է տեղի ունենա, որպեսզի Snowflake-ը իմանա, թե որտեղ եք աշխատում: Ձեր նոր աղյուսակը ստեղծելիս դարձրեք ստորև նշված կոդը (և բոլոր կոդերը, որոնք դուք գտնում եք առցանց) ձերը:

ստեղծել կամ փոխարինել աղյուսակը NEWTABLENAME(
սյունակ 1 VARCHAR,
սյունակ2 VARCHAR,
սյունակ3 VARCHAR,
սյունակ4 VARCHAR,
սյունակ5 VARCHAR
);

Խնդրում ենք իմանալ, որ Snowflake-ը մեծատառով կգրանցի այս սյունակների անունները ձեզ համար, և Google-ի պարզ որոնմամբ դուք կարող եք գտնել սյունակների բոլոր տեսակները, որոնք կարող են ավելի արդյունավետ լինել ձեր սյունակների համար: Ես անձամբ ասում եմ, երբ կասկածում եք, օգտագործեք VARCHAR, բայց դուք կարող եք ավելի ճշգրիտ լինել, քան այս օրինակը, հատկապես ավելի մեծ քանակությամբ տվյալների համար:

Snowflake — Ստեղծել Python-ում

Ես դեռ խորհուրդ եմ տալիս ստեղծել ձեր պահեստը, տվյալների բազան և սխեման՝ օգտագործելով Snowflake UI-ն, այնուհետև կարող եք գնալ python՝ տվյալներ ստեղծելու և ավելացնելու համար: Քայլերը, որոնք ես կանդրադառնամ՝ ձեր պատրաստված տվյալները python pandas DataFrame-ից Snowflake տեղափոխելու համար են՝ 1) բաց միացում ձյան փաթիլին 2) զանգահարել պահեստ, որը դուք կօգտագործեք, 3) և այնուհետև կարող եք կատարել ձեր ստեղծման կամ փոխարինման հարցումը: Հետևյալ ձևանմուշը պետք է աշխատի ձեզ համար (ես կանդրադառնամ նաև որոշ տվյալների նախապատրաստմանը և կներկայացնեմ կոդը):

*****************ՆՇՈՒՄ. Բոլորը պետք է լինեն ինքնուրույն: բացառությամբ հաշվի անվանման: Հաշիվը կարելի է գտնել ձեր snowflake url-ում: Օրինակ, URL-ների մեծ մասը հետևում է https://app.snowflake.com/‹region›/‹accountname›/ օրինակին: Իմացեք նաև, որ ստորև նշված կոդը engine = create_engine(
'snowflake://{user}:{password}@{account}/{database_name}/{schema_name}'.format(“
իրական կոդն է և կարիք չկա խմբագրելու: Դուք պետք է խմբագրեք օգտվողի անունը, գաղտնաբառը, հաշվի անունը, տվյալների բազայի անունը, պահեստը և սեղանի անունը: Եթե հարցեր կամ խնդիրներ ունեք, գրեք ինձ:**** **************

— — — — — — — — — — — — — — — — ԿՈԴ— — — — — — — — — — — — — — — — —

ներմուծել snowflake.connector
snowflake.connector.pandas_tools ներմուծել pd_writer
sqlalchemy import create_engine-ից

engine = create_engine(
'snowflake://{user}:{password}@{account}/{database_name}/{schema_name}'.format(
user = 'username',< br /> գաղտնաբառ = 'գաղտնաբառ',
հաշիվ = 'accountnameefromurl',
database_name = 'databasename',
schema_name = 'schemaname'
)
)

connection = engine.connect()
connection.execute('օգտագործել պահեստի պահեստի անունը')

connection.execute («ստեղծել կամ փոխարինել աղյուսակը NEWTABLENAME(սյունակ 1 VARCHAR, սյունակ 2 VARCHAR, սյունակ 3 VARCHAR, սյունակ 4 VARCHAR, սյունակ 5 VARCHAR)»)

— — — — — — — — — — — — — — — ՎԵՐՋ ԿՈԴ — — — — — — — — — — — — — — —

Python Pandas DataFrame to Snowflake Table

Երբ խոսքը վերաբերում է Snowflake-ին տվյալներ գրելուն՝ արդեն պատրաստված և տվյալների համար պատրաստ աղյուսակով (օգտագործելով վերը նշված կոդը)

#have your dataframe ready to go

toS3data = pd.concat(appended_data,ignore_index=True, axis=0)

#կամ toS3data = pd.read_csv('csvpath')

#կամ այլ toS3data = ‹PandasDataFrameCode›

#կամ օգտագործելով Yahoo FinancetoS3data =pd.DataFrame(yf.download(tickers=ticker, period='2d', interval='5m'))

Դուք պետք է ունենաք բոլոր սյունակների անունները, որպեսզի լինեն բոլոր մեծատառերով և ճիշտ համապատասխանեն, որպեսզի այս կոդը աշխատի: Դուք կարող եք օգտագործել նման բան՝ ձեր բոլոր սյունակները մեծատառով գրելու համար

toS3data.columns = քարտեզ (str.upper, toS3data.columns)

Այժմ ժամանակն է ուղարկել ձեր տվյալները Snowflake-ին: Սա կօգտագործի from sqlalchemy import create_engine վերեւից:

#creating your engine to snowflake — վերեւից

engine = create_engine(
'snowflake://{user}:{password}@{account}/{database_name}/{schema_name}'.format(
user = 'username',< br /> գաղտնաբառ = 'գաղտնաբառ',
հաշիվ = 'accountnameefromurl',
database_name = 'databasename',
schema_name = 'schemaname'
)
)

միացում = engine.connect()
connection.execute ('օգտագործել պահեստի պահեստի անունը')
toS3data.columns = քարտեզ (str.upper, toS3data.columns)
toS3data.to_sql( «TableNameHere», կապ, index=False, մեթոդ=pd_writer,if_exists='append')

Snowflake-ում հաջողության թեստ՝ օգտագործելով Python-ը

հարցում = «ընտրեք count(*)-ից: databasename.schemaname.TableNameHere ;”

df = pd.read_sql (հարցում, կապ)

Եվ/կամ փորձեք հաջողության հասնել Snowflake-ում՝ օգտագործելով Snowflake Worksheet-ը

ընտրեք թիվը (*) NEWSFROMS3.NEWS1.NEWSFROMPYTHONDAILY2J-ից ;

Ամբողջական կոդը

Ահա մի քանի ամբողջական ծածկագիր ձեզ համար: Ես թույլ եմ տալիս լրացնել ձեր հավատարմագրերը, պահեստը, տվյալների բազան, սխեման և աղյուսակի անվանումը: Եթե ​​հարցեր ունեք, գրեք ինձ։

ներմուծեք պանդաները որպես pd
#use to call pricing data
ներմուծեք yfinance որպես yf
ներմուծեք snowflake.connector
snowflake.connector.pandas_tools-ից ներմուծեք pd_writer
sqlalchemy import create_engine
ticker = 'QQQ'
data = pd.DataFrame(yf.download(tickers=ticker, period='2d', interval='5m'))
data.reset_index (inplace=True)
data = data.rename(columns={“Adj Close”: “AdjClose”})
#data.head()
engine = create_engine(
'snowflake://{user}:{password}@{account}/{database_name}/{schema_name}'.format(
user = 'username',
password = 'password',
հաշիվ = 'հաշվի անուն',
տվյալների բազայի անուն = 'տվյալների բազայի անուն',
schema_name = 'schemaname'
)
)
կապ = engine.connect()
connection.execute('օգտագործել պահեստի պահեստի անունը')
connection.execute('ստեղծել կամ փոխարինել աղյուսակի աղյուսակի անվանումը(Datetime VARCHAR, Open VARCHAR, High VARCHAR, Low VARCHAR, Close VARCHAR, AdjClose VARCHAR, Volume VARCHAR)')
data.columns = map(str.upper, data.columns)
կապ = engine.connect()
connection.execute ('օգտագործել պահեստի պահեստի անունը')
data.columns = map(str.upper, data.columns)
data.to_sql('tablename', կապ, index=False, method=pd_writer, if_exists='append')