рдХрд╛рд░реНрдп
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдЬрд┐рд╕ рдХрд╛рд░реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд╣ рдЗрд╕рдХреЗ рд╢рдмреНрджрд╛рдВрдХрди рдореЗрдВ рдЙрджрд╛рд╕реА рд╕реЗ рд╕рд░рд▓ рд╣реИ: рдИ-рдХреЙрдорд░реНрд╕ рд╡рд┐рднрд╛рдЧ рдХреЗ рдмрд┐рдХреНрд░реА рдбреЗрдЯрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рд░рдХреНрдд рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЕрд░реНрдерд╛рддреН, рдкрдврд╝реЗрдВ, рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рд╣рдорд╛рд░реЗ рд╕реНрдЯреЛрд░реЛрдВ рдХреА рдЯреЛрдХрд░рд┐рдпрд╛рдБ рджреБрдирд┐рдпрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдСрдирд▓рд╛рдЗрди рдмрд┐рдХреНрд░реА рдкрд░ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдирд┐рд░рдВрддрд░ рдзрд╛рд░рд╛ рдмрдирд╛рддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рднреА рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВ: рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореБрджреНрд░рд╛рдПрдБ, рд╕рдордп рдХреНрд╖реЗрддреНрд░, рдХрд░, рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░, рдСрд░реНрдбрд░ рдЖрджрд┐ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣реА рдХрд┐рд╕реА рднреА рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдХреЗрд╡рд▓, рд╢рд╛рдпрдж, рдСрд░реНрдбрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВред
рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдмреИрдареЗ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдЧреНрд░реАрдЧреЗрдЯ рдбреИрд╢рдмреЛрд░реНрдб рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд┐рд╕ рдкрд░ рд╡реНрдпрд╡рд╕рд╛рдп рд╡рд░реНрддрдорд╛рди рдХреНрд╖рдг рдХреЗ рдСрдирд▓рд╛рдЗрди рдкреНрд░рдореБрдЦ рд╕рдВрдХреЗрддрдХ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдСрдирд▓рд╛рдЗрди (рдпрд╛ рдмрд▓реНрдХрд┐, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ) рджреЗрдЦ рд╕рдХреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдпреЗ рдбреИрд╢рдмреЛрд░реНрдб рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбрд┐рдЧреНрд░реА рдореЗрдВ рдХреБрдЫ рдЕрд▓рдЧ рдереЗред
рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдРрд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рджреЗрдЦрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Owox, Microsoft рд╕реЗ BI рд╕рдорд╛рдзрд╛рди, рдХреБрдЫ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди, рдЖрджрд┐ред
рдпрд╣ рд╕рдм рд╡рд┐рдЬреНрдЮрд╛рдкрди рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдкрд░рдВрддреБ:
- рд╕рд╕реНрддрд╛ рдирд╣реАрдВ
- рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЪреАрдЬрд╝ (рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл рд╡рд┐рдХрд╛рд╕ рдХрдВрдкрдиреА рдХреЗ рдбреЗрдЯрд╛ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХреЛрдВ рдХреА рджрдХреНрд╖рддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд░рд╣рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ)
рдЙрд╕ рд╕рдордп (2019) рддрдХ, рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Google Datastudio рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рдкреЙрдХреЗрдЯ рдбреЗрдЯрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд╖реЗрдкрдг рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рдерд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ 1 рд╕реА рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдЕрдкрд▓реЛрдб рдХреА рд╣реИ, рдЗрд╕реЗ Google рд╕рдВрдЧреНрд░рд╣рдг рдХреНрд▓рд╛рдЙрдб рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рд╣реИ (рднреНрд░рдорд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ) GoogleDrive), рд╡рд╣рд╛рдВ рд╕реЗ - BigQuery рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ, рдФрд░ рдлрд┐рд░, DataStudio рдореЗрдВ, рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рд╕реНрд▓рд╛рдЗрд╕ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ред
тАФ , , , , .
, , , , . Data Studio , BigQuery , , , , .
, , SQL BigQuery, , .
BigQuery (https://console.cloud.google.com/bigquery), , .
, : 300 . , 2 BigQuery, , .
. , , BigQuery , , . , !
, SELECT, , BQ.
, BQ , . , , , .
: SQL ==> Python ==> BigQuery.
, тАФ .
, SELECT csv- GoogleStorage BQ , Google Functions, Python ( ) . , 6 ( ) .
, ?
, , , SQL . , Orders, , , , , , , id, id .. , , .
, , SELECT pandas dataframe. :
import pandas as pd
import MySQLdb
import MySQLdb.cursors
def sql_query(date0, date1):
connection = MySQLdb.connect(host=тАЭserverтАЭ, user=тАЭuserтАЭ, passwd=тАЭpassтАЭ, db=тАЭordersтАЭ, charset=тАЭcp1251тАЭ, cursorclass = MySQLdb.cursors.SSCursor)
query = тАЬSELECT * FROM orders WHERE date>=тАЩтАЭ+date0+тАЭтАЩ and date<тАЩтАЭ+date1+тАЭтАЩ тАЭ
data = pd.read_sql_query(query, connection=connection)
data.payment_date = data.payment_date.apply(lambda x: x.tz_localize(тАШEurope/MoscowтАЩ)).astype(str)
return data
, 5- , (90 , .. ) , sql_query(date) , BQ.
, , pandas dataframe .
: , BQ MERGE . BQ 1-2 . 20 70 , STRING FLOAT. 70000 .
, . BQ, .
from google.cloud import bigquery
from google.oauth2 import service_account
project_id = тАЬMyBQprojectтАЭ
dataset_id = тАЬMyDataSetтАЭ
credentials = service_account.Credentials.from_service_account_file(тАЬacc.jsonтАЭ)
client = bigquery.Client(project_id, credentials=credentials)
def upload_temp_table(df, table_id, schema):
job_config = bigquery.LoadJobConfig()
job_config.schema = schema
job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
job = client.load_table_from_dataframe(df, table_id, job_config=job_config)
job.result()
def merge_tables(temp_table, base_table, schema, head, merge_param):
merge_query = тАЬMERGE into тАЬ+base_table+тАЭ as T USING тАЬ+temp_table+тАЭ as S \
ON T.тАЭ+merge_param+тАЭ = S.тАЭ+merge_param+ \
тАЬ WHEN MATCHED then UPDATE SET тАЬ+ \
тАШ,тАЩ.join([тАШT.тАЩ+item+тАЩ=S.тАЩ+item for item in head])+ \
тАЬ WHEN NOT MATCHED then INSERT \
(тАЬ+тАЩ,тАЩ.join(head)+тАЭ) VALUES (тАЬ+тАЩ,тАЩ.join([тАШS.тАЩ+item for item in head])+тАЭ);тАЭ
job_config = bigquery.LoadJobConfig()
job_config.schema = schema
job = client.query(merge_query, job_config=job_config)
job.result()
, тАФ .
import datetime
for period in range(18):
date0 = (datetime.datetime.now() - datetime.timedelta(days = period*5 + 5)).strftime(тАШ%Y%m%dтАЩ)
date1 = (datetime.datetime.now() - datetime.timedelta(days = period*5)).strftime(тАШ%Y%m%dтАЩ)
df = sql_query(date0,date1)
upload_temp_table(df=df, table_id=тАЭtemp_tableтАЭ, schema)
merge_tables(temp_table=тАЩtemp_tableтАЩ, base_table = тАШordersтАЩ, schema=schema, head=[,,,], merge_param=тАЩidтАЩ)
head тАФ . . SQL , . MERGE- . BQ . - , Python , BQ.
.
import sys
log_file = open(тАЬlog.txtтАЭ, тАШaтАЩ)
old_stdout = sys.stdout
sys.stdout = log_file
, print
:
sys.stdout = old_stdout
log_file.close()
print -. , .
, BigQuery , DataStudio (https://datastudio.google.com/) .
, DataStudio , BigQuery Python. , , , apply.
, DataStudio (, ), , , , Datastudio .
, Datastudio Blended Tables, LEFT JOIN - . , , , BigQuery. , , , SQL-, BigQuery . , , 6 , , 6 . 20 70 3-4 BigQuery. .
, . , . - BigQuery, - Python. , merge_tables тАФ BQ . , .. тАФ . , .
, BigQuery , Google Spreadsheets. - id . :
- Python pandas dataframe
- BQ JOIN BQ (-, ).
, . - , , , .
. - -, . , , ( , F5). : Data Studio Auto-Refresh. : , View, Data Studio Auto-Refresh, , SQL=>BQ.
, , , :-)