Data_ETL.py 109 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848
  1. import logging
  2. from sync_amz_data.public.amz_ad_client import SPClient, Account, SBClient, SDClient, BaseClient
  3. import pandas as pd
  4. import numpy as np
  5. from dateutil.parser import parse
  6. pd.set_option('display.max_columns', None)
  7. import warnings
  8. warnings.filterwarnings('ignore')
  9. pd.set_option('expand_frame_repr', False)
  10. from datetime import datetime, timezone, timedelta
  11. import clickhouse_connect
  12. import pytz
  13. from typing import Literal
  14. class Common_ETLMethod(BaseClient):
  15. def timeZone(self):
  16. rel = self.get_profilesInfo()
  17. profileId = int(self.profile_id)
  18. df_info = pd.json_normalize(rel)
  19. return df_info.query("profileId==@profileId")['timezone'].values[0]
  20. def clickhouse_connect(self):
  21. conn = clickhouse_connect.get_client(host='3.93.43.158', port=8123, username='root',
  22. password='6f0eyLuiVn3slzbGWpzI')
  23. return conn
  24. def columnsName_modify(self, df):
  25. """
  26. 列名.换_,设置全部小写
  27. """
  28. df.columns = [i.replace(".", "_").lower() for i in df.columns]
  29. return df
  30. def time_stamp_convert(self, df, time_columns: list):
  31. """
  32. 时间戳转换为utc
  33. """
  34. for time_column in time_columns:
  35. df[time_column] = pd.to_datetime(df[time_column] * 1000000).map(lambda x: x.strftime("%Y-%m-%d %H:%M:%S"))
  36. df[time_columns] = df[time_columns].astype("datetime64[ns]")
  37. return df
  38. def TZ_Deal(self, df, time_columns):
  39. """
  40. TZ时间格式转换为utc
  41. """
  42. for time_column in time_columns:
  43. df[time_column] = df[time_column].map(lambda x: parse(x).strftime("%Y-%m-%d %H:%M:%S"))
  44. df[time_columns] = df[time_columns].astype("datetime64[ns]")
  45. return df
  46. def placement_segmentsplit(self, df, segment):
  47. """
  48. 拆分placement与percentage列
  49. """
  50. df[segment] = df[segment].astype("string")
  51. df[segment + str("_percentage")] = df[segment].str.extract("'percentage':.+([\d\.]{1,}),").astype('float32')
  52. df[segment + str("_placement")] = df[segment].str.extract("'placement':.+'(.+)'")
  53. df.replace(['nan', 'Nan', 'NaN'], np.nan, inplace=True)
  54. df.drop(columns=[segment], inplace=True)
  55. return df
  56. def expression_split(self, df, segment):
  57. """
  58. 拆分type,value列
  59. """
  60. df[segment] = df[segment].astype("string")
  61. df[segment + str("_type")] = df[segment].str.extract(r"'type':\s{0,1}'(.+?)',")
  62. df[segment + str("_value")] = df[segment].str.extract(r"'value':\s{0,1}[\'\[\{](.+)'")
  63. df[segment + str("_value")] = df[segment + str("_value")].map(
  64. lambda x: x if pd.isna(x) or "," not in x else "[{" + x + "'}]").str.replace("{{","{")
  65. df.replace(['nan', 'Nan', 'NaN'], np.nan, inplace=True)
  66. df.drop(columns=[segment], inplace=True)
  67. return df
  68. def get_keyOvalue(self,expressions, result: Literal['value', 'type']):
  69. if expressions not in [None,pd.NA,pd.NaT]:
  70. if len(expressions) > 1:
  71. return [i.get(result) for i in expressions]
  72. if len(expressions) == 1:
  73. sub_ = expressions[0].get(result)
  74. if sub_ is None:
  75. return None
  76. elif type(sub_) == str:
  77. return sub_
  78. elif type(sub_) == list:
  79. return [i.get(result) for i in sub_]
  80. else:
  81. return expressions
  82. else:
  83. return '-'
  84. def id_type_trans(self,df):
  85. id_columns = [i for i in df.columns if 'id' in i.lower() and 'bid' not in i.lower()]
  86. df[id_columns] = df[id_columns].fillna(-1).applymap(lambda x: round(int(x), 0)).astype("string")
  87. df[id_columns] = df[id_columns].applymap(lambda x: '' if x == '-1' else x)
  88. return df
  89. def type_trans(self, df_report, columns: list, timeZone_: str, extra_columns: list = []):
  90. # 添加字段
  91. df_report['profileId'] = self.profile_id
  92. df_report['timeZone'] = timeZone_
  93. df_needManualAdd = [i for i in columns if i not in df_report.columns]
  94. if len(df_needManualAdd) > 0:
  95. df_report[df_needManualAdd] = None
  96. columns.extend(extra_columns)
  97. columns.append("date") if "date" not in columns else columns
  98. columns.extend(["timeZone", "profileId"])
  99. # 修改字段类型
  100. df_report = self.id_type_trans(df_report)
  101. df_report['date'] = df_report['date'].astype("datetime64[ns]")
  102. # df_report[df_report.select_dtypes('O').columns] = df_report[df_report.select_dtypes('O').columns].astype('string')
  103. toFloat = [i for i in columns if 'sales' in i.lower() or 'percent' in i.lower() or 'video' in i.lower()]
  104. if len(toFloat) > 0:
  105. df_report[toFloat] = df_report[toFloat].applymap(lambda x: np.nan if pd.isna(x) or x == '' else float(x))
  106. df_report.fillna(np.nan, inplace=True)
  107. # print(df_report[columns].info())
  108. # df_report.to_excel("df.xlsx")
  109. return df_report
  110. def today_(self):
  111. timeZone_ = self.timeZone()
  112. today_ = datetime.now(tz=pytz.timezone(timeZone_))
  113. logging.info(f"timezone:{timeZone_},today:{today_}")
  114. print(timeZone_,today_)
  115. return timeZone_,today_
  116. class Acount_ETL(Account, Common_ETLMethod):
  117. def portfolio_ETL(self):
  118. list_portfolio = self.get_portfolios()
  119. df_portfolio = pd.json_normalize(list_portfolio)
  120. # print(self.columnsName_modify(df_portfolio))
  121. return self.columnsName_modify(df_portfolio)
  122. class SP_ETL(SPClient, Common_ETLMethod):
  123. def campaigns_ETL(self):
  124. list_campaign_SP = list(self.iter_campaigns(**{"includeExtendedDataFields": True}))
  125. df_campaign = pd.json_normalize(list_campaign_SP)
  126. df_campaign = self.placement_segmentsplit(df_campaign, "dynamicBidding.placementBidding")
  127. df_campaign = self.TZ_Deal(df_campaign, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  128. # print(df_campaign)
  129. return self.columnsName_modify(df_campaign)
  130. def adGroups_ETL(self):
  131. list_adGroup_SP = list(self.iter_adGroups(**{"includeExtendedDataFields": True}))
  132. df_adGroup_SP = pd.json_normalize(list_adGroup_SP)
  133. df_adGroup_SP = self.TZ_Deal(df_adGroup_SP,
  134. ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  135. return self.columnsName_modify(df_adGroup_SP)
  136. def ads_ETL(self):
  137. list_adId_SP = list(self.iter_ads(**{"includeExtendedDataFields": True}))
  138. df_adId_SP = pd.json_normalize(list_adId_SP)
  139. df_adId_SP = self.TZ_Deal(df_adId_SP, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  140. return self.columnsName_modify(df_adId_SP)
  141. def keywords_ETL(self):
  142. list_keywords_SP = list(self.iter_keywords(**{"includeExtendedDataFields": True}))
  143. df_keywords_SP = pd.json_normalize(list_keywords_SP)
  144. df_keywords_SP = self.TZ_Deal(df_keywords_SP,
  145. ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  146. return self.columnsName_modify(df_keywords_SP)
  147. def targets_ETL(self):
  148. list_targets = list(self.iter_targets(**{"includeExtendedDataFields": True}))
  149. df_targets = pd.json_normalize(list_targets)
  150. print("--")
  151. df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  152. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpression'].map(
  153. lambda x: self.get_keyOvalue(x, 'type'))
  154. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpression'].map(
  155. lambda x: self.get_keyOvalue(x, 'value'))
  156. return self.columnsName_modify(df_targets)
  157. def budget_ETL(self, campaign_ids: list):
  158. list_budget = self.get_budget(campaign_ids=campaign_ids)['success']
  159. df_budget = pd.json_normalize(list_budget)
  160. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  161. return self.columnsName_modify(df_budget)
  162. def reportV3_campaign_spCampaignsETL(self, conn, params={}):
  163. timeZone_,today = self.today_()
  164. if params.get("endDate") == None:
  165. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  166. if params.get("startDate") == None:
  167. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  168. "%Y-%m-%d")
  169. params['reportType'] = "spCampaigns"
  170. params['columns'] = [
  171. 'campaignName', 'campaignId', 'campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
  172. 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
  173. 'campaignBudgetCurrencyCode', 'topOfSearchImpressionShare',
  174. 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
  175. 'purchasesSameSku1d',
  176. 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
  177. 'unitsSoldClicks7d',
  178. 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
  179. 'attributedSalesSameSku1d',
  180. 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
  181. 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
  182. 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
  183. 'clickThroughRate', 'spend'
  184. ] # 'startDate', 'endDate',
  185. params['groupby'] = ['campaign']
  186. params['timeUnit'] = 'DAILY'
  187. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  188. columns=params['columns'], startDate=params['startDate'],
  189. endDate=params['endDate'], reportType=params['reportType'])
  190. # print(list_report)
  191. df_report = pd.json_normalize(list_report)
  192. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  193. conn.insert_df("AmazonReport.SP_spCampaigns_campaignV3", df_report[params['columns']])
  194. print("插入完成SP_spCampaigns_campaignV3")
  195. return df_report[params['columns']]
  196. def reportV3_adGroup_spCampaignsETL(self, conn, params={}):
  197. timeZone_,today = self.today_()
  198. if params.get("endDate") == None:
  199. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  200. if params.get("startDate") == None:
  201. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  202. "%Y-%m-%d")
  203. params['reportType'] = "spCampaigns"
  204. params['columns'] = [
  205. 'adGroupName', 'adGroupId', 'adStatus','campaignName', 'campaignId', 'campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
  206. 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
  207. 'campaignBudgetCurrencyCode',
  208. 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
  209. 'purchasesSameSku1d',
  210. 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
  211. 'unitsSoldClicks7d',
  212. 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
  213. 'attributedSalesSameSku1d',
  214. 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
  215. 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
  216. 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
  217. 'clickThroughRate', 'spend'
  218. ] # 'startDate', 'endDate',
  219. params['groupby'] = ['adGroup',"campaign"]
  220. params['timeUnit'] = 'DAILY'
  221. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  222. columns=params['columns'], startDate=params['startDate'],
  223. endDate=params['endDate'], reportType=params['reportType'])
  224. # print(list_report)
  225. df_report = pd.json_normalize(list_report)
  226. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  227. conn.insert_df("AmazonReport.SP_spCampaigns_adGroupV3", df_report[params['columns']])
  228. print("插入完成SP_spCampaigns_adGroupV3")
  229. return df_report[params['columns']]
  230. #
  231. def reportV3_campaignPlacement_spCampaignsETL(self, conn, params={}):
  232. timeZone_,today = self.today_()
  233. if params.get("endDate") == None:
  234. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  235. if params.get("startDate") == None:
  236. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  237. "%Y-%m-%d")
  238. params['reportType'] = "spCampaigns"
  239. params['columns'] = [
  240. 'placementClassification','campaignName', 'campaignId','campaignStatus', 'campaignBudgetAmount', 'campaignBudgetType',
  241. 'campaignRuleBasedBudgetAmount', 'campaignApplicableBudgetRuleId', 'campaignApplicableBudgetRuleName',
  242. 'campaignBudgetCurrencyCode',
  243. 'impressions', 'clicks', 'cost', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d',
  244. 'purchasesSameSku1d',
  245. 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d', 'unitsSoldClicks1d',
  246. 'unitsSoldClicks7d',
  247. 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d', 'sales14d', 'sales30d',
  248. 'attributedSalesSameSku1d',
  249. 'attributedSalesSameSku7d', 'attributedSalesSameSku14d', 'attributedSalesSameSku30d', 'unitsSoldSameSku1d',
  250. 'unitsSoldSameSku7d', 'unitsSoldSameSku14d', 'unitsSoldSameSku30d', 'kindleEditionNormalizedPagesRead14d',
  251. 'kindleEditionNormalizedPagesRoyalties14d', 'date', 'campaignBiddingStrategy', 'costPerClick',
  252. 'clickThroughRate', 'spend'
  253. ] # 'startDate', 'endDate',
  254. params['groupby'] = ['campaign','campaignPlacement']
  255. params['timeUnit'] = 'DAILY'
  256. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  257. columns=params['columns'], startDate=params['startDate'],
  258. endDate=params['endDate'], reportType=params['reportType'])
  259. # print(list_report)
  260. df_report = pd.json_normalize(list_report)
  261. # print(df_report)
  262. # print(df_report.columns)
  263. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  264. conn.insert_df("AmazonReport.SP_spCampaigns_placementV3", df_report[params['columns']])
  265. print("插入完成SP_spCampaigns_placementV3")
  266. return df_report[params['columns']]
  267. def reportV3_targeting_spTargetingETL(self, conn, params={}):
  268. timeZone_,today = self.today_()
  269. if params.get("endDate") == None:
  270. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  271. if params.get("startDate") == None:
  272. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  273. "%Y-%m-%d")
  274. params['reportType'] = "spTargeting"
  275. params['columns'] = [
  276. 'adKeywordStatus',
  277. 'impressions', 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'purchases1d', 'purchases7d',
  278. 'purchases14d',
  279. 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
  280. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  281. 'sales14d',
  282. 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
  283. 'attributedSalesSameSku30d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d', 'unitsSoldSameSku14d',
  284. 'unitsSoldSameSku30d',
  285. 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d', 'salesOtherSku7d',
  286. 'unitsSoldOtherSku7d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d', 'keywordId',
  287. 'keyword',
  288. 'campaignBudgetCurrencyCode', 'date', 'portfolioId', 'campaignName', 'campaignId',
  289. 'campaignBudgetType', 'campaignBudgetAmount', 'campaignStatus', 'keywordBid', 'adGroupName', 'adGroupId',
  290. 'keywordType',
  291. 'matchType', 'targeting', 'topOfSearchImpressionShare'
  292. ] # 'startDate', 'endDate',
  293. params['groupby'] = ['targeting']
  294. params['timeUnit'] = 'DAILY'
  295. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  296. columns=params['columns'], startDate=params['startDate'],
  297. endDate=params['endDate'], reportType=params['reportType'])
  298. # print(list_report)
  299. df_report = pd.json_normalize(list_report)
  300. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  301. conn.insert_df("AmazonReport.SP_spTargeting_targetingV3", df_report[params['columns']])
  302. print("插入完成SP_spTargeting_targetingV3")
  303. return df_report[params['columns']]
  304. def reportV3_searchTerm_spSearchTermETL(self, conn, params={}):
  305. timeZone_,today = self.today_()
  306. if params.get("endDate") == None:
  307. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  308. if params.get("startDate") == None:
  309. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  310. "%Y-%m-%d")
  311. params['reportType'] = "spSearchTerm"
  312. params['columns'] = [
  313. 'adKeywordStatus',
  314. 'impressions', 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'purchases1d', 'purchases7d',
  315. 'purchases14d',
  316. 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
  317. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  318. 'sales14d',
  319. 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
  320. 'attributedSalesSameSku30d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d', 'unitsSoldSameSku14d',
  321. 'unitsSoldSameSku30d',
  322. 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d', 'salesOtherSku7d',
  323. 'unitsSoldOtherSku7d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d', 'keywordId',
  324. 'keyword',
  325. 'campaignBudgetCurrencyCode', 'date', 'portfolioId', 'searchTerm', 'campaignName', 'campaignId',
  326. 'campaignBudgetType', 'campaignBudgetAmount', 'campaignStatus', 'keywordBid', 'adGroupName', 'adGroupId',
  327. 'keywordType',
  328. 'matchType', 'targeting'
  329. ] # 'startDate', 'endDate',
  330. params['groupby'] = ['searchTerm']
  331. params['timeUnit'] = 'DAILY'
  332. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  333. columns=params['columns'], startDate=params['startDate'],
  334. endDate=params['endDate'], reportType=params['reportType'])
  335. # print(list_report)
  336. df_report = pd.json_normalize(list_report)
  337. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  338. conn.insert_df("AmazonReport.SP_spSearchTerm_searchTermV3", df_report[params['columns']])
  339. print("插入完成SP_spSearchTerm_searchTermV3")
  340. return df_report[params['columns']]
  341. def reportV3_advertiser_spAdvertisedProductETL(self, conn, params={}):
  342. timeZone_,today = self.today_()
  343. if params.get("endDate") == None:
  344. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  345. if params.get("startDate") == None:
  346. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  347. "%Y-%m-%d")
  348. params['reportType'] = "spAdvertisedProduct"
  349. params['columns'] = [
  350. 'date', 'campaignName', 'campaignId', 'adGroupName', 'adGroupId', 'adId', 'portfolioId', 'impressions',
  351. 'clicks', 'costPerClick', 'clickThroughRate', 'cost', 'spend', 'campaignBudgetCurrencyCode',
  352. 'campaignBudgetAmount',
  353. 'campaignBudgetType', 'campaignStatus', 'advertisedAsin', 'advertisedSku', 'purchases1d', 'purchases7d',
  354. 'purchases14d',
  355. 'purchases30d', 'purchasesSameSku1d', 'purchasesSameSku7d', 'purchasesSameSku14d', 'purchasesSameSku30d',
  356. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  357. 'sales14d',
  358. 'sales30d', 'attributedSalesSameSku1d', 'attributedSalesSameSku7d', 'attributedSalesSameSku14d',
  359. 'attributedSalesSameSku30d', 'salesOtherSku7d', 'unitsSoldSameSku1d', 'unitsSoldSameSku7d',
  360. 'unitsSoldSameSku14d',
  361. 'unitsSoldSameSku30d', 'unitsSoldOtherSku7d', 'kindleEditionNormalizedPagesRead14d',
  362. 'kindleEditionNormalizedPagesRoyalties14d', 'acosClicks7d', 'acosClicks14d', 'roasClicks7d', 'roasClicks14d'
  363. ] # 'startDate', 'endDate',
  364. params['groupby'] = ['advertiser']
  365. params['timeUnit'] = 'DAILY'
  366. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  367. columns=params['columns'], startDate=params['startDate'],
  368. endDate=params['endDate'], reportType=params['reportType'])
  369. # print(list_report)
  370. df_report = pd.json_normalize(list_report)
  371. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  372. # print(df_report.info())
  373. conn.insert_df("AmazonReport.SP_spAdvertisedProduct_advertiserV3", df_report[params['columns']])
  374. print("插入完成SP_spAdvertisedProduct_advertiserV3")
  375. return df_report[params['columns']]
  376. def reportV3_asin_spPurchasedProductETL(self, conn, params={}):
  377. timeZone_,today = self.today_()
  378. if params.get("endDate") == None:
  379. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  380. if params.get("startDate") == None:
  381. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  382. "%Y-%m-%d")
  383. params['reportType'] = "spPurchasedProduct"
  384. params['columns'] = [
  385. 'date', 'portfolioId', 'campaignName', 'campaignId', 'adGroupName', 'adGroupId', 'keywordId', 'keyword',
  386. 'keywordType', 'advertisedAsin', 'purchasedAsin', 'advertisedSku', 'campaignBudgetCurrencyCode',
  387. 'matchType',
  388. 'unitsSoldClicks1d', 'unitsSoldClicks7d', 'unitsSoldClicks14d', 'unitsSoldClicks30d', 'sales1d', 'sales7d',
  389. 'sales14d',
  390. 'sales30d', 'purchases1d', 'purchases7d', 'purchases14d', 'purchases30d', 'unitsSoldOtherSku1d',
  391. 'unitsSoldOtherSku7d',
  392. 'unitsSoldOtherSku14d', 'unitsSoldOtherSku30d', 'salesOtherSku1d', 'salesOtherSku7d', 'salesOtherSku14d',
  393. 'salesOtherSku30d', 'purchasesOtherSku1d', 'purchasesOtherSku7d', 'purchasesOtherSku14d',
  394. 'purchasesOtherSku30d',
  395. 'kindleEditionNormalizedPagesRead14d', 'kindleEditionNormalizedPagesRoyalties14d'
  396. ] # 'startDate', 'endDate',
  397. params['groupby'] = ['asin']
  398. params['timeUnit'] = 'DAILY'
  399. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  400. columns=params['columns'], startDate=params['startDate'],
  401. endDate=params['endDate'], reportType=params['reportType'])
  402. # print(list_report)
  403. df_report = pd.json_normalize(list_report)
  404. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  405. conn.insert_df("AmazonReport.SP_spPurchasedProduct_asinV3", df_report[params['columns']])
  406. print("插入完成SP_spPurchasedProduct_asinV3")
  407. return df_report[params['columns']]
  408. class SB_ETL(SBClient, Common_ETLMethod):
  409. def campaigns_ETL(self):
  410. list_campaign_SB = list(self.iter_campaigns(**{"includeExtendedDataFields": True}))
  411. df_campaign = pd.json_normalize(list_campaign_SB)
  412. df_campaign = self.placement_segmentsplit(df_campaign, "bidding.bidAdjustmentsByPlacement")
  413. df_campaign = self.time_stamp_convert(df_campaign, ["extendedData.creationDate", "extendedData.lastUpdateDate"])
  414. # print(df_campaign)
  415. return self.columnsName_modify(df_campaign)
  416. def adGroups_ETL(self):
  417. list_adGroup_SB = list(self.iter_adGroups(**{"includeExtendedDataFields": True}))
  418. df_adGroup_SP = pd.json_normalize(list_adGroup_SB)
  419. df_adGroup_SP = self.time_stamp_convert(df_adGroup_SP,
  420. ["extendedData.creationDate", "extendedData.lastUpdateDate"])
  421. return self.columnsName_modify(df_adGroup_SP)
  422. def ads_ETL(self):
  423. list_adId_SB = list(self.iter_ads(**{"includeExtendedDataFields": True}))
  424. df_adId_SP = pd.json_normalize(list_adId_SB)
  425. df_adId_SP = self.time_stamp_convert(df_adId_SP, ["extendedData.creationDate", "extendedData.lastUpdateDate"])
  426. return self.columnsName_modify(df_adId_SP)
  427. def keywords_ETL(self):
  428. list_keywords_SB = [row for _ in list(self.iter_keywords()) for row in _]
  429. df_keywords_SP = pd.json_normalize(list_keywords_SB)
  430. return self.columnsName_modify(df_keywords_SP)
  431. def targets_ETL(self):
  432. list_targets = list(self.iter_targets())
  433. df_targets = pd.json_normalize(list_targets)
  434. # df_targets = self.TZ_Deal(df_targets, ["extendedData.creationDateTime", "extendedData.lastUpdateDateTime"])
  435. # df_targets = self.expression_split(df_targets, "resolvedExpressions")
  436. df_targets = self.id_type_trans(df_targets)
  437. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'type'))
  438. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x,'value'))
  439. return self.columnsName_modify(df_targets)
  440. def budget_ETL(self, campaign_ids: list):
  441. list_budget = self.get_budget(campaignIds=campaign_ids)['success']
  442. df_budget = pd.json_normalize(list_budget)
  443. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  444. return self.columnsName_modify(df_budget)
  445. def reportV3_campaign_sbCampaigns_ETL(self, conn, params={}):
  446. timeZone_,today = self.today_()
  447. if params.get("endDate") == None:
  448. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  449. if params.get("startDate") == None:
  450. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  451. "%Y-%m-%d")
  452. params['reportType'] = "sbCampaigns" #sbCampaigns
  453. params['columns'] = ['campaignId',
  454. 'campaignName','campaignBudgetAmount', 'campaignBudgetCurrencyCode', 'campaignBudgetType', 'topOfSearchImpressionShare',
  455. 'addToCart', 'addToCartClicks', 'addToCartRate', 'brandedSearches', 'brandedSearchesClicks',
  456. 'campaignBudgetAmount', 'campaignBudgetCurrencyCode', 'campaignBudgetType', 'campaignStatus', 'clicks', 'cost',
  457. 'costType', 'date', 'detailPageViews','detailPageViewsClicks', 'eCPAddToCart', 'endDate', 'impressions', 'newToBrandDetailPageViewRate',
  458. 'newToBrandDetailPageViews', 'newToBrandDetailPageViewsClicks', 'newToBrandECPDetailPageView',
  459. 'newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandPurchasesPercentage',
  460. 'newToBrandPurchasesRate', 'newToBrandSales', 'newToBrandSalesClicks', 'newToBrandSalesPercentage',
  461. 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks', 'newToBrandUnitsSoldPercentage', 'purchases',
  462. 'purchasesClicks', 'purchasesPromoted', 'sales', 'salesClicks', 'salesPromoted', 'startDate',
  463. 'topOfSearchImpressionShare', 'unitsSold', 'unitsSoldClicks', 'video5SecondViewRate',
  464. 'video5SecondViews', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews',
  465. 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate', 'viewableImpressions',
  466. 'viewClickThroughRate'
  467. ] # 'startDate', 'endDate',
  468. params['groupby'] = ['campaign']
  469. params['timeUnit'] = 'DAILY'
  470. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  471. columns=params['columns'], startDate=params['startDate'],
  472. endDate=params['endDate'], reportType=params['reportType'])
  473. # print(list_report)
  474. df_report = pd.json_normalize(list_report)
  475. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  476. # print(df_report)
  477. # conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
  478. # print("插入完成SB_sbPurchasedProduct_asinV3")
  479. return df_report[params['columns']]
  480. def reportV3_purchasedAsinRecord_ETL(self, conn, params={}):
  481. timeZone_,today = self.today_()
  482. if params.get("endDate") == None:
  483. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  484. if params.get("startDate") == None:
  485. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  486. "%Y-%m-%d")
  487. params['reportType'] = "sbPurchasedProduct"
  488. params['columns'] = [
  489. 'campaignId', 'adGroupId', 'date', 'campaignBudgetCurrencyCode', 'campaignName', 'adGroupName',
  490. 'attributionType', 'purchasedAsin', 'productName', 'productCategory', 'sales14d', 'orders14d',
  491. 'unitsSold14d',
  492. 'newToBrandSales14d', 'newToBrandPurchases14d', 'newToBrandUnitsSold14d', 'newToBrandSalesPercentage14d',
  493. 'newToBrandPurchasesPercentage14d', 'newToBrandUnitsSoldPercentage14d'
  494. ] # 'startDate', 'endDate',
  495. params['groupby'] = ['purchasedAsin']
  496. params['timeUnit'] = 'DAILY'
  497. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  498. columns=params['columns'], startDate=params['startDate'],
  499. endDate=params['endDate'], reportType=params['reportType'])
  500. # print(list_report)
  501. df_report = pd.json_normalize(list_report)
  502. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  503. # print(df_report)
  504. conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
  505. print("插入完成SB_sbPurchasedProduct_asinV3")
  506. return df_report[params['columns']]
  507. def reportV2_campaignsRecord_ETL(self, conn, params={}):
  508. print(params)
  509. timeZone_,today = self.today_()
  510. if params.get("date") == None:
  511. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  512. params['record_type'] = 'campaigns'
  513. metric = ['campaignId','campaignName', 'impressions', 'clicks', 'cost',
  514. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
  515. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  516. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  517. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  518. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  519. 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
  520. 'dpv14d','topOfSearchImpressionShare','unitsSold14d'
  521. ]
  522. # print(metric)
  523. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  524. metrics=metric)
  525. # print(list_report)
  526. df_report = pd.json_normalize(list_report)
  527. date = datetime.strptime(params['date'], '%Y%m%d')
  528. df_report['date'] = date
  529. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  530. conn.insert_df("AmazonReport.SB_campaignsV2", df_report[metric])
  531. print("插入完成SB_campaignsV2")
  532. return df_report[metric]
  533. def reportV2_campaignsVideo_ETL(self, conn, params={}):
  534. print(params)
  535. timeZone_,today = self.today_()
  536. if params.get("date") == None:
  537. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  538. params['record_type'] = 'campaigns'
  539. metric = [
  540. 'campaignId','campaignName','impressions','clicks','cost',
  541. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  542. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  543. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  544. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  545. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  546. 'currency','dpv14d','topOfSearchImpressionShare','vctr','vtr','video5SecondViewRate','video5SecondViews',
  547. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  548. 'viewableImpressions'
  549. ]
  550. # print(metric)
  551. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  552. metrics=metric, creative_type='video')
  553. # print(list_report)
  554. df_report = pd.json_normalize(list_report)
  555. date = datetime.strptime(params['date'], '%Y%m%d')
  556. df_report['date'] = date
  557. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  558. conn.insert_df("AmazonReport.SB_campaignsVideoV2", df_report[metric])
  559. print("插入完成SB_campaignsVideoV2")
  560. # print(df_report[metric].info())
  561. return df_report[metric]
  562. def reportV2_placementRecord_ETL(self, conn, params={}):
  563. print(params)
  564. timeZone_,today = self.today_()
  565. if params.get("date") == None:
  566. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  567. params['record_type'] = 'campaigns'
  568. metric = ['campaignId','campaignName','impressions','clicks','cost',
  569. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
  570. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  571. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  572. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
  573. 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  574. 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','unitsSold14d'
  575. ] # 'placement'
  576. # print(metric)
  577. # print(date)
  578. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  579. metrics=metric, segment='placement')
  580. df_report = pd.json_normalize(list_report)
  581. date = datetime.strptime(params['date'], '%Y%m%d')
  582. df_report['date'] = date
  583. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['placement'])
  584. conn.insert_df("AmazonReport.SB_campaignsPlacementV2", df_report[metric])
  585. print("插入完成SB_campaignsPlacementV2")
  586. # print(df_report[metric].info())
  587. return df_report[metric]
  588. def reportV2_placementVideo_ETL(self, conn, params={}):
  589. timeZone_,today = self.today_()
  590. if params.get("date") == None:
  591. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  592. params['record_type'] = 'campaigns'
  593. metric = [
  594. 'campaignId','campaignName','impressions','clicks','cost',
  595. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  596. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  597. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  598. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  599. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  600. 'currency','dpv14d','vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews',
  601. 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  602. ] # 'placement'
  603. # print(date)
  604. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  605. metrics=metric, segment='placement', creative_type='video')
  606. # print(list_report)
  607. df_report = pd.json_normalize(list_report)
  608. date = datetime.strptime(params['date'], '%Y%m%d')
  609. df_report['date'] = date
  610. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['placement'])
  611. # print(df_report.info())
  612. conn.insert_df("AmazonReport.SB_campaignsPlacementVideoV2", df_report[metric])
  613. print("插入完成SB_campaignsPlacementVideoV2")
  614. return df_report[metric]
  615. def reportV2_adGroupsRecord_ETL(self, conn, params={}):
  616. timeZone_,today = self.today_()
  617. if params.get("date") == None:
  618. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  619. params['record_type'] = 'adGroups'
  620. metric = [
  621. 'campaignId','campaignName','adGroupId','adGroupName','impressions', 'clicks', 'cost',
  622. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  623. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  624. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  625. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  626. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  627. 'dpv14d','unitsSold14d',
  628. ] #
  629. # print(date)
  630. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  631. metrics=metric)
  632. # print(list_report)
  633. df_report = pd.json_normalize(list_report)
  634. date = datetime.strptime(params['date'], '%Y%m%d')
  635. df_report['date'] = date
  636. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  637. # print(df_report.info())
  638. conn.insert_df("AmazonReport.SB_adGroupsV2", df_report[metric])
  639. print("插入完成SB_adGroupsV2")
  640. return df_report[metric]
  641. def reportV2_adGroupsVideo_ETL(self, conn, params={}):
  642. timeZone_,today = self.today_()
  643. if params.get("date") == None:
  644. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  645. params['record_type'] = 'adGroups'
  646. metric = [
  647. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  648. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  649. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  650. 'attributedOrdersNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  651. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  652. 'campaignBudget','campaignBudgetType','campaignStatus','currency','vctr','vtr','video5SecondViewRate',
  653. 'video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
  654. 'videoUnmutes','viewableImpressions','dpv14d'
  655. ] #
  656. # print(date)
  657. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  658. metrics=metric, creative_type='video')
  659. # print(list_report)
  660. df_report = pd.json_normalize(list_report)
  661. date = datetime.strptime(params['date'], '%Y%m%d')
  662. df_report['date'] = date
  663. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  664. # print(df_report.info())
  665. conn.insert_df("AmazonReport.SB_adGroupsVideoV2", df_report[metric])
  666. print("插入完成SB_adGroupsVideoV2")
  667. return df_report[metric]
  668. def reportV2_targetsRecord_ETL(self, conn, params={}):
  669. timeZone_,today = self.today_()
  670. if params.get("date") == None:
  671. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  672. params['record_type'] = 'targets'
  673. metric = [
  674. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions', 'clicks', 'cost',
  675. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  676. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  677. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  678. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  679. 'campaignBudgetType','campaignStatus','dpv14d','targetingExpression','targetingType',
  680. 'topOfSearchImpressionShare','unitsSold14d'
  681. ] #
  682. # print(date)
  683. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  684. metrics=metric)
  685. # print(list_report)
  686. df_report = pd.json_normalize(list_report)
  687. date = datetime.strptime(params['date'], '%Y%m%d')
  688. df_report['date'] = date
  689. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  690. # print(df_report.info())
  691. conn.insert_df("AmazonReport.SB_targetsV2", df_report[metric])
  692. print("插入完成SB_targetsV2")
  693. return df_report[metric]
  694. def reportV2_targetsVideo_ETL(self, conn, params={}):
  695. timeZone_,today = self.today_()
  696. if params.get("date") == None:
  697. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  698. params['record_type'] = 'targets'
  699. metric = [
  700. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  701. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  702. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  703. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  704. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  705. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  706. 'currency','dpv14d','targetingExpression','targetingType','topOfSearchImpressionShare','vctr','vtr',
  707. 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews',
  708. 'videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  709. ] #
  710. # print(date)
  711. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  712. metrics=metric, creative_type='video')
  713. # print(list_report)
  714. df_report = pd.json_normalize(list_report)
  715. date = datetime.strptime(params['date'], '%Y%m%d')
  716. df_report['date'] = date
  717. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  718. # print(df_report.info())
  719. conn.insert_df("AmazonReport.SB_targetsVideoV2", df_report[metric])
  720. print("插入完成SB_targetsVideoV2")
  721. return df_report[metric]
  722. def reportV2_keywordsRecord_ETL(self, conn, params={}):
  723. timeZone_,today = self.today_()
  724. if params.get("date") == None:
  725. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  726. params['record_type'] = 'keywords'
  727. metric = [
  728. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  729. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName','attributedConversions14d',
  730. 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
  731. 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  732. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  733. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  734. 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','keywordBid','keywordStatus',
  735. 'matchType','searchTermImpressionRank','searchTermImpressionShare','topOfSearchImpressionShare','unitsSold14d',
  736. ] #
  737. # print(date)
  738. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  739. metrics=metric)
  740. # print(list_campaigns_report)
  741. df_report = pd.json_normalize(list_report)
  742. date = datetime.strptime(params['date'], '%Y%m%d')
  743. df_report['date'] = date
  744. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  745. # print(df_report.info())
  746. conn.insert_df("AmazonReport.SB_keywordsV2", df_report[metric])
  747. print("插入完成SB_keywordsV2")
  748. return df_report[metric]
  749. def reportV2_keywordsVideo_ETL(self, conn, params={}):
  750. timeZone_,today = self.today_()
  751. if params.get("date") == None:
  752. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  753. params['record_type'] = 'keywords'
  754. metric = [
  755. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  756. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  757. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  758. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  759. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  760. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
  761. 'campaignStatus','currency','dpv14d','keywordBid','keywordStatus','matchType','topOfSearchImpressionShare',
  762. 'vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
  763. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  764. ] #
  765. # print(date)
  766. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  767. metrics=metric, creative_type='video')
  768. # print(list_campaigns_report)
  769. df_report = pd.json_normalize(list_report)
  770. date = datetime.strptime(params['date'], '%Y%m%d')
  771. df_report['date'] = date
  772. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  773. # print(df_report.info())
  774. conn.insert_df("AmazonReport.SB_keywordsVideoV2", df_report[metric])
  775. print("插入完成SB_keywordsVideoV2")
  776. return df_report[metric]
  777. def reportV2_searchtermsRecord_ETL(self, conn, params={}):
  778. timeZone_,today = self.today_()
  779. if params.get("date") == None:
  780. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  781. params['record_type'] = 'keywords'
  782. metric = [
  783. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  784. 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus','keywordBid',
  785. 'keywordStatus','matchType','searchTermImpressionRank','searchTermImpressionShare'
  786. ] #
  787. # print(date)
  788. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  789. metrics=metric, segment='query')
  790. # print(list_report)
  791. df_report = pd.json_normalize(list_report)
  792. date = datetime.strptime(params['date'], '%Y%m%d')
  793. df_report['date'] = date
  794. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['query'])
  795. # print(df_report.info())
  796. conn.insert_df("AmazonReport.SB_keywordsQueryV2", df_report[metric])
  797. print("插入完成SB_keywordsQueryV2")
  798. return df_report[metric]
  799. def reportV2_searchtermsVideo_ETL(self, conn, params={}):
  800. timeZone_,today = self.today_()
  801. if params.get("date") == None:
  802. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  803. params['record_type'] = 'keywords'
  804. metric = [
  805. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions','clicks','cost',
  806. 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus',
  807. 'keywordBid','keywordStatus','matchType','vctr','vtr','video5SecondViewRate','video5SecondViews',
  808. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
  809. 'videoUnmutes','viewableImpressions',
  810. ] # 'query','currency'
  811. # print(date)
  812. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  813. metrics=metric, segment='query', creative_type='video')
  814. # print(list_report)
  815. df_report = pd.json_normalize(list_report)
  816. date = datetime.strptime(params['date'], '%Y%m%d')
  817. df_report['date'] = date
  818. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['query'])
  819. # print(df_report.info())
  820. conn.insert_df("AmazonReport.SB_keywordsQueryVideoV2", df_report[metric])
  821. print("插入完成SB_keywordsQueryVideoV2")
  822. return df_report[metric]
  823. def reportV2_adsRecord_ETL(self, conn, params={}):
  824. timeZone_,today = self.today_()
  825. if params.get("date") == None:
  826. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  827. params['record_type'] = 'ads'
  828. metric = [
  829. 'campaignId','campaignName','adGroupId','adGroupName','adId','impressions','clicks','cost',
  830. 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d','attributedConversions14d',
  831. 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
  832. 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  833. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  834. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  835. 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
  836. 'dpv14d','unitsSold14d','vctr',
  837. ] #
  838. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  839. metrics=metric)
  840. df_report = pd.json_normalize(list_report)
  841. date = datetime.strptime(params['date'], '%Y%m%d')
  842. df_report['date'] = date
  843. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  844. conn.insert_df("AmazonReport.SB_adsV2", df_report[metric])
  845. print("插入完成SB_adsV2")
  846. return df_report[metric]
  847. def reportV2_adsVideo_ETL(self, conn, params={}):
  848. timeZone_,today = self.today_()
  849. if params.get("date") == None:
  850. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  851. params['record_type'] = 'ads'
  852. metric = [
  853. 'campaignId','campaignName','adGroupId','adGroupName','adId', 'impressions', 'clicks', 'cost',
  854. 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d',
  855. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  856. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  857. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
  858. 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  859. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
  860. 'campaignRuleBasedBudget','campaignStatus','currency','dpv14d','vctr','vtr',
  861. 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
  862. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  863. ] #
  864. # print(date)
  865. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  866. metrics=metric, creative_type='video')
  867. # print(list_report)
  868. df_report = pd.json_normalize(list_report)
  869. date = datetime.strptime(params['date'], '%Y%m%d')
  870. df_report['date'] = date
  871. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  872. # print(df_report.info())
  873. conn.insert_df("AmazonReport.SB_adsVideoV2", df_report[metric])
  874. print("插入完成SB_adsVideoV2")
  875. return df_report[metric]
  876. class SD_ETL(SDClient, Common_ETLMethod):
  877. def campaigns_ETL(self):
  878. list_campaign_SD = self.get_campaigns()
  879. df_campaign = pd.json_normalize(list_campaign_SD)
  880. df_campaign['startDate'] = df_campaign['startDate'].map(
  881. lambda x: datetime.strptime(x, "%Y%m%d").date()) # 转换为标准时间格式
  882. df_campaign['portfolioId'] = df_campaign['portfolioId'].fillna(-1).astype("int64") # 将portfolio列为空的填充为-1
  883. return self.columnsName_modify(df_campaign)
  884. def adGroups_ETL(self, **param):
  885. list_adGroups_SD = [row for _ in list(self.iter_adGroups(**param)) for row in _]
  886. df_adGroups_SD = pd.json_normalize(list_adGroups_SD)
  887. tactic = {"T00020": "Contextual targeting", "T00030": "Audiences targeting"}
  888. df_adGroups_SD["tactic_type"] = df_adGroups_SD['tactic'].map(tactic) # T00020、T00030解释字段
  889. return self.columnsName_modify(df_adGroups_SD)
  890. def ads_ETL(self):
  891. list_ads_SD = [row for _ in list(self.iter_ads()) for row in _]
  892. df_ads_SD = pd.json_normalize(list_ads_SD)
  893. return self.columnsName_modify(df_ads_SD)
  894. def targets_ETL(self, **param):
  895. list_targets = [row for _ in list(self.iter_targets(**param)) for row in _]
  896. df_targets = pd.json_normalize(list_targets)
  897. # df_targets = self.expression_split(df_targets, "resolvedExpression")
  898. df_targets = self.id_type_trans(df_targets)
  899. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpression'].map(lambda x:self.get_keyOvalue(x,'type'))
  900. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpression'].map(lambda x:self.get_keyOvalue(x,'value'))
  901. return self.columnsName_modify(df_targets)
  902. def budget_ETL(self, campaignsIds: list):
  903. list_budget = self.get_budget(campaignIds=campaignsIds)['success']
  904. df_budget = pd.json_normalize(list_budget)
  905. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  906. return self.columnsName_modify(df_budget)
  907. def reportV3_campaign_sdCampaigns_ETL(self, conn, params={}):
  908. timeZone_,today = self.today_()
  909. if params.get("endDate") == None:
  910. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  911. if params.get("startDate") == None:
  912. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  913. "%Y-%m-%d")
  914. params['reportType'] = "sdCampaigns"
  915. params['columns'] = [ 'campaignName', 'campaignId','campaignStatus','campaignBudgetAmount', 'impressions','clicks', 'cost',
  916. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  917. 'brandedSearches', 'brandedSearchesClicks','brandedSearchesViews', 'brandedSearchRate',
  918. 'costType', 'cumulativeReach','detailPageViews', 'detailPageViewsClicks','eCPAddToCart', 'eCPBrandSearch',
  919. 'newToBrandDetailPageViewClicks','newToBrandDetailPageViewRate', 'newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView',
  920. 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks','newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  921. 'campaignBudgetCurrencyCode','date',
  922. 'impressionsViews','impressionsFrequencyAverage', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
  923. 'sales','salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews',
  924. 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate','viewClickThroughRate'
  925. ] # 'startDate', 'endDate',
  926. params['groupby'] = ['campaign']
  927. params['timeUnit'] = 'DAILY'
  928. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  929. columns=params['columns'], startDate=params['startDate'],
  930. endDate=params['endDate'], reportType=params['reportType'])
  931. # print(list_report)
  932. df_report = pd.json_normalize(list_report)
  933. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  934. # print(df_report.columns)
  935. conn.insert_df("AmazonReport.SD_sdCampaigns_campaignV3", df_report[params['columns']])
  936. print("插入完成SD_sdCampaigns_campaignV3")
  937. return df_report[params['columns']]
  938. def reportV3_campaignMT_sdCampaigns_ETL(self, conn, params={}):
  939. timeZone_,today = self.today_()
  940. if params.get("endDate") == None:
  941. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  942. if params.get("startDate") == None:
  943. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  944. "%Y-%m-%d")
  945. params['reportType'] = "sdCampaigns"
  946. params['columns'] = [
  947. 'matchedTargetAsin','campaignName', 'campaignId','campaignStatus','campaignBudgetAmount', 'impressions','clicks', 'cost',
  948. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  949. 'brandedSearches', 'brandedSearchesClicks','brandedSearchesViews', 'brandedSearchRate',
  950. 'costType', 'detailPageViews', 'detailPageViewsClicks','eCPAddToCart', 'eCPBrandSearch',
  951. 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks','newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  952. 'campaignBudgetCurrencyCode','date',
  953. 'impressionsViews', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
  954. 'sales','salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews',
  955. 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate','viewClickThroughRate'
  956. ] # 'startDate', 'endDate',
  957. params['groupby'] = ['campaign',"matchedTarget"]
  958. params['timeUnit'] = 'DAILY'
  959. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  960. columns=params['columns'], startDate=params['startDate'],
  961. endDate=params['endDate'], reportType=params['reportType'])
  962. # print(list_report)
  963. df_report = pd.json_normalize(list_report)
  964. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  965. # print(df_report.columns)
  966. conn.insert_df("AmazonReport.SD_sdCampaigns_campaignMatchedTargetV3", df_report[params['columns']])
  967. print("插入完成SD_sdCampaigns_campaignMatchedTargetV3")
  968. return df_report[params['columns']]
  969. def reportV3_adgroup_sdAdGroup_ETL(self, conn, params={}):
  970. timeZone_,today = self.today_()
  971. if params.get("endDate") == None:
  972. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  973. if params.get("startDate") == None:
  974. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  975. "%Y-%m-%d")
  976. params['reportType'] = "sdAdGroup"
  977. params['columns'] = ['campaignName','campaignId', 'adGroupName', 'adGroupId', 'impressions','clicks', 'cost',
  978. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  979. 'bidOptimization','brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  980. 'cumulativeReach','detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart','eCPBrandSearch',
  981. 'newToBrandDetailPageViewClicks', 'newToBrandDetailPageViewRate','newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView',
  982. 'newToBrandSales', 'newToBrandPurchases', 'newToBrandPurchasesClicks','newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  983. 'campaignBudgetCurrencyCode','date', 'impressionsViews', 'impressionsFrequencyAverage', 'purchases',
  984. 'purchasesClicks', 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'unitsSold',
  985. 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  986. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  987. ] # 'startDate', 'endDate',
  988. params['groupby'] = ['adGroup']
  989. params['timeUnit'] = 'DAILY'
  990. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  991. columns=params['columns'], startDate=params['startDate'],
  992. endDate=params['endDate'], reportType=params['reportType'])
  993. # print(list_report)
  994. df_report = pd.json_normalize(list_report)
  995. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  996. # print(df_report)
  997. conn.insert_df("AmazonReport.SD_sdAdGroup_adGroupV3", df_report[params['columns']])
  998. print("插入完成SD_sdAdGroup_adGroupV3")
  999. return df_report[params['columns']]
  1000. def reportV3_adgroupMT_sdAdGroup_ETL(self, conn, params={}):
  1001. timeZone_,today = self.today_()
  1002. if params.get("endDate") == None:
  1003. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  1004. if params.get("startDate") == None:
  1005. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1006. "%Y-%m-%d")
  1007. params['reportType'] = "sdAdGroup"
  1008. params['columns'] = [
  1009. 'matchedTargetAsin','campaignName','campaignId', 'adGroupName', 'adGroupId', 'impressions','clicks', 'cost',
  1010. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1011. 'bidOptimization','brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1012. 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart','eCPBrandSearch',
  1013. 'newToBrandSales', 'newToBrandPurchases', 'newToBrandPurchasesClicks','newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1014. 'campaignBudgetCurrencyCode','date', 'impressionsViews', 'purchases',
  1015. 'purchasesClicks', 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'unitsSold',
  1016. 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1017. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1018. ] # 'startDate', 'endDate',
  1019. params['groupby'] = ['adGroup',"matchedTarget"]
  1020. params['timeUnit'] = 'DAILY'
  1021. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1022. columns=params['columns'], startDate=params['startDate'],
  1023. endDate=params['endDate'], reportType=params['reportType'])
  1024. # print(list_report)
  1025. df_report = pd.json_normalize(list_report)
  1026. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1027. # print(df_report)
  1028. conn.insert_df("AmazonReport.SD_sdAdGroup_adGroupMatchedTargetV3", df_report[params['columns']])
  1029. print("插入完成SD_sdAdGroup_adGroupMatchedTargetV3")
  1030. return df_report[params['columns']]
  1031. def reportV3_targeting_sdTargeting_ETL(self, conn, params={}):
  1032. timeZone_,today = self.today_()
  1033. if params.get("endDate") == None:
  1034. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  1035. if params.get("startDate") == None:
  1036. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1037. "%Y-%m-%d")
  1038. params['reportType'] = "sdTargeting"
  1039. params['columns'] = ['campaignName', 'campaignId','adGroupName','adGroupId', 'targetingText','targetingId','impressions','clicks', 'cost',
  1040. 'adKeywordStatus', 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1041. 'brandedSearches',
  1042. 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1043. 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart', 'eCPBrandSearch',
  1044. 'newToBrandDetailPageViewClicks', 'newToBrandDetailPageViewRate', 'newToBrandDetailPageViews',
  1045. 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView','newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks',
  1046. 'newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1047. 'campaignBudgetCurrencyCode',
  1048. 'date',
  1049. 'impressionsViews', 'purchases', 'purchasesClicks',
  1050. 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'targetingExpression',
  1051. 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews','videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1052. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1053. ] # 'startDate', 'endDate',
  1054. params['groupby'] = ['targeting']
  1055. params['timeUnit'] = 'DAILY'
  1056. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1057. columns=params['columns'], startDate=params['startDate'],
  1058. endDate=params['endDate'], reportType=params['reportType'])
  1059. # print(list_report)
  1060. df_report = pd.json_normalize(list_report)
  1061. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1062. # print(df_report)
  1063. conn.insert_df("AmazonReport.SD_targeting_sdTargetingV3", df_report[params['columns']])
  1064. print("插入完成SD_targeting_sdTargetingV3")
  1065. return df_report[params['columns']]
  1066. def reportV3_targetingMT_sdTargeting_ETL(self, conn, params={}):
  1067. timeZone_,today = self.today_()
  1068. if params.get("endDate") == None:
  1069. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  1070. if params.get("startDate") == None:
  1071. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1072. "%Y-%m-%d")
  1073. params['reportType'] = "sdTargeting"
  1074. params['columns'] = [
  1075. 'matchedTargetAsin',
  1076. 'campaignName', 'campaignId','adGroupName','adGroupId', 'targetingText','targetingId','impressions','clicks', 'cost',
  1077. 'adKeywordStatus', 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1078. 'brandedSearches',
  1079. 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1080. 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart', 'eCPBrandSearch',
  1081. 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks',
  1082. 'newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1083. 'campaignBudgetCurrencyCode',
  1084. 'date',
  1085. 'impressionsViews', 'purchases', 'purchasesClicks',
  1086. 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'targetingExpression',
  1087. 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews','videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1088. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1089. ] # 'startDate', 'endDate',
  1090. params['groupby'] = ['targeting',"matchedTarget"]
  1091. params['timeUnit'] = 'DAILY'
  1092. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1093. columns=params['columns'], startDate=params['startDate'],
  1094. endDate=params['endDate'], reportType=params['reportType'])
  1095. # print(list_report)
  1096. df_report = pd.json_normalize(list_report)
  1097. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1098. # print(df_report)
  1099. conn.insert_df("AmazonReport.SD_targeting_sdTargetingMatchedTargetV3", df_report[params['columns']])
  1100. print("插入完成SD_targeting_sdTargetingMatchedTargetV3")
  1101. return df_report[params['columns']]
  1102. def reportV3_advertiser_sdAdvertisedProduct_ETL(self, conn, params={}):
  1103. timeZone_,today = self.today_()
  1104. if params.get("endDate") == None:
  1105. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  1106. if params.get("startDate") == None:
  1107. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1108. "%Y-%m-%d")
  1109. params['reportType'] = "sdAdvertisedProduct"
  1110. params['columns'] = ['campaignName','campaignId','adGroupName','adGroupId','adId','impressions','clicks', 'cost',
  1111. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews', 'bidOptimization',
  1112. 'brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1113. 'detailPageViews', 'detailPageViewsClicks','eCPAddToCart',
  1114. 'eCPBrandSearch','newToBrandDetailPageViewClicks',
  1115. 'newToBrandDetailPageViewRate', 'newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView','newToBrandSales',
  1116. 'newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks', 'newToBrandUnitsSold',
  1117. 'newToBrandUnitsSoldClicks',
  1118. 'campaignBudgetCurrencyCode',
  1119. 'cumulativeReach', 'date', 'impressionsFrequencyAverage', 'impressionsViews', 'promotedAsin', 'promotedSku', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
  1120. 'sales',
  1121. 'salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews',
  1122. 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1123. ] # 'startDate', 'endDate',
  1124. params['groupby'] = ['advertiser']
  1125. params['timeUnit'] = 'DAILY'
  1126. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1127. columns=params['columns'], startDate=params['startDate'],
  1128. endDate=params['endDate'], reportType=params['reportType'])
  1129. # print(list_report)
  1130. df_report = pd.json_normalize(list_report)
  1131. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1132. # print(df_report)
  1133. conn.insert_df("AmazonReport.SD_advertiser_sdAdvertisedProductV3", df_report[params['columns']])
  1134. print("插入完成SD_advertiser_sdAdvertisedProductV3")
  1135. return df_report[params['columns']]
  1136. def reportV3_asin_sdPurchasedProduct_ETL(self, conn, params={}):
  1137. timeZone_,today = self.today_()
  1138. if params.get("endDate") == None:
  1139. params["endDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y-%m-%d")
  1140. if params.get("startDate") == None:
  1141. params["startDate"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1142. "%Y-%m-%d")
  1143. params['reportType'] = "sdPurchasedProduct"
  1144. params['columns'] = ['campaignName','campaignId', 'adGroupName','adGroupId', 'promotedAsin', 'promotedSku',
  1145. 'asinBrandHalo', 'campaignBudgetCurrencyCode',
  1146. 'conversionsBrandHalo', 'conversionsBrandHaloClicks', 'date', 'salesBrandHalo',
  1147. 'salesBrandHaloClicks', 'unitsSoldBrandHalo', 'unitsSoldBrandHaloClicks'
  1148. ] # 'startDate', 'endDate',
  1149. params['groupby'] = ['asin']
  1150. params['timeUnit'] = 'DAILY'
  1151. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1152. columns=params['columns'], startDate=params['startDate'],
  1153. endDate=params['endDate'], reportType=params['reportType'])
  1154. # print(list_report)
  1155. df_report = pd.json_normalize(list_report)
  1156. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1157. # print(df_report)
  1158. conn.insert_df("AmazonReport.SD_asin_sdPurchasedProductV3", df_report[params['columns']])
  1159. print("插入完成SD_asin_sdPurchasedProductV3")
  1160. return df_report[params['columns']]
  1161. campaigns_metrics = [
  1162. 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
  1163. 'attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1164. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
  1165. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1166. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
  1167. 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
  1168. 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1169. 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
  1170. 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d',
  1171. 'avgImpressionsFrequency','campaignBudget','campaignStatus','cumulativeReach','costType',
  1172. 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  1173. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
  1174. 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
  1175. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1176. ]
  1177. def reportV2_campaignsRecord_t2_ETL(self, conn, params={}):
  1178. timeZone_,today = self.today_()
  1179. if params.get("date") == None:
  1180. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1181. params['record_type'] = 'campaigns'
  1182. metric = self.campaigns_metrics
  1183. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1184. metrics=metric, tactic="T00020")
  1185. # print(list_report)
  1186. df_report = pd.json_normalize(list_report)
  1187. date = datetime.strptime(params['date'], '%Y%m%d')
  1188. df_report['date'] = date
  1189. df_report['tactic'] = 'Contextual targeting'
  1190. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1191. conn.insert_df("AmazonReport.SD_campaignsV2", df_report[metric])
  1192. print("插入完成SD_campaignsV2—")
  1193. return df_report[metric]
  1194. def reportV2_campaignsRecord_t3_ETL(self, conn, params={}):
  1195. timeZone_,today = self.today_()
  1196. if params.get("date") == None:
  1197. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1198. params['record_type'] = 'campaigns'
  1199. metric = self.campaigns_metrics
  1200. print("tactic:t3")
  1201. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1202. metrics=metric, tactic="T00030")#
  1203. df_report = pd.json_normalize(list_report)
  1204. print(df_report.columns)
  1205. date = datetime.strptime(params['date'], '%Y%m%d')
  1206. df_report['date'] = date
  1207. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1208. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1209. conn.insert_df("AmazonReport.SD_campaignsV2", df_report[metric])
  1210. print("插入完成SD_campaignsV2")
  1211. return df_report[metric]
  1212. adGroups_metrics = [
  1213. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  1214. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
  1215. 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
  1216. 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
  1217. 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
  1218. 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
  1219. 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1220. 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
  1221. 'attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency','bidOptimization','cumulativeReach',
  1222. 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  1223. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
  1224. 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
  1225. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1226. ]
  1227. def reportV2_adGroupsRecord_t2_ETL(self, conn, params={}):
  1228. timeZone_,today = self.today_()
  1229. if params.get("date") == None:
  1230. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1231. params['record_type'] = 'adGroups'
  1232. metric = self.adGroups_metrics
  1233. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1234. metrics=metric, tactic="T00020")
  1235. df_report = pd.json_normalize(list_report)
  1236. date = datetime.strptime(params['date'], '%Y%m%d')
  1237. df_report['date'] = date
  1238. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1239. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1240. conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[metric])
  1241. print("插入完成SD_adGroupsV2")
  1242. return df_report[metric]
  1243. def reportV2_adGroupsRecord_t3_ETL(self, conn, params={}):
  1244. timeZone_,today = self.today_()
  1245. if params.get("date") == None:
  1246. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1247. params['record_type'] = 'adGroups'
  1248. metric = self.adGroups_metrics
  1249. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1250. metrics=metric, tactic="T00020")
  1251. df_report = pd.json_normalize(list_report)
  1252. date = datetime.strptime(params['date'], '%Y%m%d')
  1253. df_report['date'] = date
  1254. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1255. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1256. # print(df_report.info())
  1257. conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[metric])
  1258. print("插入完成SD_adGroupsV2")
  1259. return df_report[metric]
  1260. productAds_metrics = [
  1261. 'campaignId','campaignName','adGroupId','adGroupName','adId','asin','sku', 'impressions', 'clicks','cost',
  1262. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1263. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
  1264. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1265. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU','attributedSales7d',
  1266. 'attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1267. 'attributedSales30dSameSKU','attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
  1268. 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency',
  1269. 'cumulativeReach','currency','vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  1270. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1271. 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews','videoFirstQuartileViews',
  1272. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1273. ]
  1274. def reportV2_productAds_t2_ETL(self, conn, params={}):
  1275. timeZone_,today = self.today_()
  1276. if params.get("date") == None:
  1277. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1278. params['record_type'] = 'productAds'
  1279. metric = self.productAds_metrics
  1280. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1281. metrics=metric, tactic="T00020")
  1282. # print(list_report)
  1283. df_report = pd.json_normalize(list_report)
  1284. date = datetime.strptime(params['date'], '%Y%m%d')
  1285. df_report['date'] = date
  1286. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1287. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1288. conn.insert_df("AmazonReport.SD_adsV2", df_report[metric])
  1289. print("插入完成SD_adsV2")
  1290. return df_report[metric]
  1291. def reportV2_productAds_t3_ETL(self, conn, params={}):
  1292. timeZone_,today = self.today_()
  1293. if params.get("date") == None:
  1294. params["date"] = (datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1295. params['record_type'] = 'productAds'
  1296. metric = self.productAds_metrics
  1297. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1298. metrics=metric, tactic="T00030")
  1299. # print(list_report)
  1300. df_report = pd.json_normalize(list_report)
  1301. date = datetime.strptime(params['date'], '%Y%m%d')
  1302. df_report['date'] = date
  1303. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1304. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1305. # print(df_report.info())
  1306. conn.insert_df("AmazonReport.SD_adsV2", df_report[metric])
  1307. print("插入完成SD_adsV2")
  1308. return df_report[metric]
  1309. targets_metrics = [
  1310. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  1311. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1312. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU','attributedConversions30d',
  1313. 'attributedConversions30dSameSKU','attributedDetailPageView14d','attributedOrdersNewToBrand14d',
  1314. 'attributedSales1d','attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
  1315. 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1316. 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
  1317. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType',
  1318. 'vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
  1319. 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1320. 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews',
  1321. 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1322. ]
  1323. def reportV2_targets_t2_ETL(self, conn, params={}):
  1324. timeZone_,today = self.today_()
  1325. if params.get("date") == None:
  1326. params["date"] = (
  1327. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1328. "%Y%m%d")
  1329. params['record_type'] = 'targets'
  1330. metric = self.targets_metrics
  1331. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1332. metrics=metric, tactic="T00020")
  1333. # print(list_report)
  1334. df_report = pd.json_normalize(list_report)
  1335. date = datetime.strptime(params['date'], '%Y%m%d')
  1336. df_report['date'] = date
  1337. df_report['tactic'] = 'Contextual targeting' # {"T00020":"","T00030":"Audiences targeting"}
  1338. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1339. # print(df_report[metric].info())
  1340. conn.insert_df("AmazonReport.SD_targetsV2", df_report[metric])
  1341. print("插入完成SD_targetsV2")
  1342. return df_report[metric]
  1343. def reportV2_targets_t3_ETL(self, conn, params={}):
  1344. timeZone_,today = self.today_()
  1345. if params.get("date") == None:
  1346. params["date"] = (
  1347. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1348. "%Y%m%d")
  1349. params['record_type'] = 'targets'
  1350. metric = self.targets_metrics
  1351. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1352. metrics=metric, tactic="T00030")
  1353. # print(list_report)
  1354. df_report = pd.json_normalize(list_report)
  1355. date = datetime.strptime(params['date'], '%Y%m%d')
  1356. df_report['date'] = date
  1357. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1358. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1359. # print(df_report.info())
  1360. conn.insert_df("AmazonReport.SD_targetsV2", df_report[metric])
  1361. print("插入完成SD_targetsV2")
  1362. return df_report[metric]
  1363. asins_metrics = [
  1364. 'campaignId','campaignName','adGroupId','adGroupName','asin','sku','attributedConversions1dOtherSKU',
  1365. 'attributedConversions7dOtherSKU','attributedConversions14dOtherSKU','attributedConversions30dOtherSKU',
  1366. 'attributedSales1dOtherSKU','attributedSales7dOtherSKU','attributedSales14dOtherSKU','attributedSales30dOtherSKU',
  1367. 'attributedUnitsOrdered1dOtherSKU','attributedUnitsOrdered7dOtherSKU','attributedUnitsOrdered14dOtherSKU',
  1368. 'attributedUnitsOrdered30dOtherSKU','currency','otherAsin','viewAttributedUnitsOrdered1dOtherSKU',
  1369. 'viewAttributedUnitsOrdered7dOtherSKU','viewAttributedUnitsOrdered14dOtherSKU','viewAttributedUnitsOrdered30dOtherSKU',
  1370. 'viewAttributedSales1dOtherSKU','viewAttributedSales7dOtherSKU','viewAttributedSales14dOtherSKU',
  1371. 'viewAttributedSales30dOtherSKU','viewAttributedConversions1dOtherSKU','viewAttributedConversions7dOtherSKU',
  1372. 'viewAttributedConversions14dOtherSKU','viewAttributedConversions30dOtherSKU',
  1373. ]
  1374. def reportV2_asins_t2_ETL(self, conn, params={}):
  1375. timeZone_,today = self.today_()
  1376. if params.get("date") == None:
  1377. params["date"] = (
  1378. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1379. "%Y%m%d")
  1380. params['record_type'] = 'asins'
  1381. metric = self.asins_metrics
  1382. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1383. metrics=metric, tactic="T00020")
  1384. # print(list_report)
  1385. df_report = pd.json_normalize(list_report)
  1386. date = datetime.strptime(params['date'], '%Y%m%d')
  1387. df_report['date'] = date
  1388. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1389. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1390. # print(df_report.info())
  1391. conn.insert_df("AmazonReport.SD_asinsV2", df_report[metric])
  1392. print("插入完成SD_asinsV2")
  1393. return df_report[metric]
  1394. def reportV2_asins_t3_ETL(self, conn, params={}):
  1395. timeZone_,today = self.today_()
  1396. if params.get("date") == None:
  1397. params["date"] = (
  1398. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1399. "%Y%m%d")
  1400. params['record_type'] = 'asins'
  1401. metric = self.asins_metrics
  1402. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1403. metrics=metric, tactic="T00030")
  1404. # print(list_report)
  1405. df_report = pd.json_normalize(list_report)
  1406. date = datetime.strptime(params['date'], '%Y%m%d')
  1407. df_report['date'] = date
  1408. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1409. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1410. conn.insert_df("AmazonReport.SD_asinsV2", df_report[metric])
  1411. print("插入完成SD_asinsV2")
  1412. return df_report[metric]
  1413. campaigns_MT_metrics = [
  1414. 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
  1415. 'attributedConversions1d','attributedConversions1dSameSKU', 'attributedConversions7d',
  1416. 'attributedConversions7dSameSKU', 'attributedConversions14d','attributedConversions14dSameSKU',
  1417. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1418. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU', 'attributedSales7d',
  1419. 'attributedSales7dSameSKU', 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1420. 'attributedSales30dSameSKU','attributedSalesNewToBrand14d',
  1421. 'attributedUnitsOrdered1d', 'attributedUnitsOrdered7d', 'attributedUnitsOrdered14d',
  1422. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','campaignBudget',
  1423. 'campaignStatus','costType','currency', 'viewImpressions','viewAttributedBrandedSearches14d',
  1424. 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
  1425. 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1426. 'viewAttributedUnitsOrderedNewToBrand14d',
  1427. ] # 'matchedTarget'
  1428. def reportV2_campaign_matchedTarget_t2_ETL(self, conn, params={}):
  1429. timeZone_,today = self.today_()
  1430. if params.get("date") == None:
  1431. params["date"] = (
  1432. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1433. "%Y%m%d")
  1434. params['record_type'] = 'campaigns'
  1435. metric = self.campaigns_MT_metrics
  1436. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1437. metrics=metric, tactic="T00020", segment='matchedTarget')
  1438. # print(list_report)
  1439. df_report = pd.json_normalize(list_report)
  1440. date = datetime.strptime(params['date'], '%Y%m%d')
  1441. df_report['date'] = date
  1442. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1443. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1444. conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[metric])
  1445. print("插入完成SD_campaignsMatchedTargetV2")
  1446. return df_report[metric]
  1447. def reportV2_campaign_matchedTarget_t3_ETL(self, conn, params={}):
  1448. timeZone_,today = self.today_()
  1449. if params.get("date") == None:
  1450. params["date"] = (
  1451. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1452. "%Y%m%d")
  1453. params['record_type'] = 'campaigns'
  1454. metric = self.campaigns_MT_metrics
  1455. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1456. metrics=metric, tactic="T00030", segment='matchedTarget')
  1457. # print(list_report)
  1458. df_report = pd.json_normalize(list_report)
  1459. date = datetime.strptime(params['date'], '%Y%m%d')
  1460. df_report['date'] = date
  1461. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1462. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1463. conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[metric])
  1464. print("插入完成SD_campaignsMatchedTargetV2")
  1465. return df_report[metric]
  1466. adGroups_MT_metrics = [
  1467. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  1468. 'attributedBrandedSearches14d','attributedConversions1d', 'attributedConversions1dSameSKU',
  1469. 'attributedConversions7d', 'attributedConversions7dSameSKU','attributedConversions14d',
  1470. 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
  1471. 'attributedDetailPageView14d', 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
  1472. 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1473. 'attributedSales30dSameSKU','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
  1474. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','bidOptimization',
  1475. 'currency','viewImpressions','viewAttributedBrandedSearches14d','viewAttributedConversions14d',
  1476. 'viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
  1477. 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
  1478. ] # , 'matchedTarget'
  1479. def reportV2_adGroups_matchedTarget_t2_ETL(self, conn, params={}):
  1480. timeZone_,today = self.today_()
  1481. if params.get("date") == None:
  1482. params["date"] = (
  1483. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1484. "%Y%m%d")
  1485. params['record_type'] = 'adGroups'
  1486. metric = self.adGroups_MT_metrics
  1487. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1488. metrics=metric, tactic="T00020", segment='matchedTarget')
  1489. # print(list_report)
  1490. df_report = pd.json_normalize(list_report)
  1491. date = datetime.strptime(params['date'], '%Y%m%d')
  1492. df_report['date'] = date
  1493. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1494. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1495. conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[metric])
  1496. print("插入完成SD_adGroupsMatchedTargetV2")
  1497. return df_report[metric]
  1498. def reportV2_adGroups_matchedTarget_t3_ETL(self, conn, params={}):
  1499. timeZone_,today = self.today_()
  1500. if params.get("date") == None:
  1501. params["date"] = (
  1502. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1503. "%Y%m%d")
  1504. params['record_type'] = 'adGroups'
  1505. metric = self.adGroups_MT_metrics
  1506. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1507. metrics=metric, tactic="T00030", segment='matchedTarget')
  1508. df_report = pd.json_normalize(list_report)
  1509. date = datetime.strptime(params['date'], '%Y%m%d')
  1510. df_report['date'] = date
  1511. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1512. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1513. conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[metric])
  1514. print("插入完成SD_adGroupsMatchedTargetV2")
  1515. return df_report[metric]
  1516. targets_MT_metrics = [
  1517. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  1518. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
  1519. 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
  1520. 'attributedConversions14dSameSKU','attributedConversions30d', 'attributedConversions30dSameSKU',
  1521. 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
  1522. 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
  1523. 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU','attributedSalesNewToBrand14d',
  1524. 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
  1525. 'attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType','viewAttributedBrandedSearches14d',
  1526. 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
  1527. 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
  1528. ]
  1529. def reportV2_targets_matchedTarget_t2_ETL(self, conn, params={}):
  1530. timeZone_,today = self.today_()
  1531. if params.get("date") == None:
  1532. params["date"] = (
  1533. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime(
  1534. "%Y%m%d")
  1535. params['record_type'] = 'targets'
  1536. metric = self.targets_MT_metrics
  1537. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1538. metrics=metric, tactic="T00020", segment='matchedTarget')
  1539. df_report = pd.json_normalize(list_report)
  1540. date = datetime.strptime(params['date'], '%Y%m%d')
  1541. df_report['date'] = date
  1542. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1543. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1544. conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[metric])
  1545. print("插入完成SD_targetsMatchedTargetV2")
  1546. return df_report[metric]
  1547. def reportV2_targets_matchedTarget_t3_ETL(self, conn, params={}):
  1548. timeZone_,today = self.today_()
  1549. if params.get("date") == None:
  1550. params["date"] = (
  1551. datetime(today.year, today.month, today.day) - timedelta(days=1)).strftime("%Y%m%d")
  1552. params['record_type'] = 'targets'
  1553. metric = self.targets_MT_metrics
  1554. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1555. metrics=metric, tactic="T00030", segment='matchedTarget')
  1556. df_report = pd.json_normalize(list_report)
  1557. date = datetime.strptime(params['date'], '%Y%m%d')
  1558. df_report['date'] = date
  1559. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1560. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1561. conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[metric])
  1562. print("插入完成SD_targetsMatchedTargetV2")
  1563. return df_report[metric]
  1564. if __name__ == '__main__':
  1565. AWS_CREDENTIALS = {
  1566. 'lwa_client_id': 'amzn1.application-oa2-client.ebd701cd07854fb38c37ee49ec4ba109',
  1567. 'refresh_token': "Atzr|IwEBIL4ur8kbcwRyxVu_srprAAoTYzujnBvA6jU-0SMxkRgOhGjYJSUNGKvw24EQwJa1jG5RM76mQD2P22AKSq8qSD94LddoXGdKDO74eQVYl0RhuqOMFqdrEZpp1p4bIR6_N8VeSJDHr7UCuo8FiabkSHrkq7tsNvRP-yI-bnpQv4EayPBh7YwHVX3hYdRbhxaBvgJENgCuiEPb35Q2-Z6w6ujjiKUAK2VSbCFpENlEfcHNsjDeY7RCvFlwlCoHj1IeiNIaFTE9yXFu3aEWlExe3LzHv6PZyunEi88QJSXKSh56Um0e0eEg05rMv-VBM83cAqc5POmZnTP1vUdZO8fQv3NFLZ-xU6e1WQVxVPi5Cyqk4jYhGf1Y9t98N654y0tVvw74qNIsTrB-8bGS0Uhfe24oBEWmzObvBY3zhtT1d42myGUJv4pMTU6yPoS83zhPKm3LbUDEpBA1hvvc_09jHk7vUEAuFB-UAZzlht2C1yklzQ",
  1568. 'lwa_client_secret': 'cbf0514186db4df91e04a8905f0a91b605eae4201254ced879d8bb90df4b474d',
  1569. 'profile_id': "3006125408623189"
  1570. }
  1571. conn = Common_ETLMethod(**AWS_CREDENTIALS).clickhouse_connect()
  1572. # SD
  1573. ac_etl = SB_ETL(**AWS_CREDENTIALS)
  1574. # ls = ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
  1575. ls = ac_etl.targets_ETL()
  1576. print(ls)
  1577. # ls.to_csv('temp.csv')
  1578. # print(ls)
  1579. # print(ls.info())
  1580. # print(ls.to_excel('obse11.xlsx'))
  1581. # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
  1582. # ac_etl.reportV2_campaignsRecord_t3_ETL(conn)
  1583. # ac_etl.reportV2_adGroupsRecord_t2_ETL(conn)
  1584. # ac_etl.reportV2_adGroupsRecord_t3_ETL(conn)
  1585. # ac_etl.reportV2_asins_t2_ETL(conn)
  1586. # ac_etl.reportV2_asins_t3_ETL(conn)
  1587. # ac_etl.reportV2_productAds_t2_ETL(conn)
  1588. # ac_etl.reportV2_productAds_t3_ETL(conn)
  1589. # ac_etl.reportV2_targets_t2_ETL(conn)
  1590. # ac_etl.reportV2_productAds_t3_ETL(conn)
  1591. # ac_etl.reportV2_campaign_matchedTarget_t2_ETL(conn)
  1592. # ac_etl.reportV2_campaign_matchedTarget_t3_ETL(conn)
  1593. # ac_etl.reportV2_adGroups_matchedTarget_t2_ETL(conn)
  1594. # ac_etl.reportV2_adGroups_matchedTarget_t3_ETL(conn)
  1595. # ac_etl.reportV2_targets_matchedTarget_t2_ETL(conn)
  1596. # ac_etl.reportV2_targets_matchedTarget_t3_ETL(conn)
  1597. # SB
  1598. # ac_etl = SB_ETL(**AWS_CREDENTIALS)
  1599. # ac_etl.reportV3_purchasedAsinRecord_ETL(conn)
  1600. # ac_etl.reportV2_campaignsRecord_ETL(conn)
  1601. # ac_etl.reportV2_campaignsVideo_ETL(conn)
  1602. # ac_etl.reportV2_adGroupsRecord_ETL(conn)
  1603. # ac_etl.reportV2_adGroupsVideo_ETL(conn)
  1604. # ac_etl.reportV2_adsRecord_ETL(conn)
  1605. # ac_etl.reportV2_adsVideo_ETL(conn)
  1606. # ac_etl.reportV2_keywordsRecord_ETL(conn)
  1607. # ac_etl.reportV2_keywordsVideo_ETL(conn)
  1608. # ac_etl.reportV2_placementRecord_ETL(conn)
  1609. # ac_etl.reportV2_placementVideo_ETL(conn)
  1610. # ac_etl.reportV2_searchtermsRecord_ETL(conn)
  1611. # ac_etl.reportV2_searchtermsVideo_ETL(conn)
  1612. # ac_etl.reportV2_targetsRecord_ETL(conn)
  1613. # ac_etl.reportV2_targetsVideo_ETL(conn)
  1614. # SP
  1615. # ac_etl = SP_ETL(**AWS_CREDENTIALS)
  1616. # ac_etl.reportV3_campaign_spCampaignsETL(conn)
  1617. # ac_etl.reportV3_adGroup_spCampaignsETL(conn)
  1618. # ac_etl.reportV3_campaignPlacement_spCampaignsETL(conn)
  1619. # ac_etl.reportV3_targeting_spTargetingETL(conn)
  1620. # ac_etl.reportV3_searchTerm_spSearchTermETL(conn)
  1621. # ac_etl.reportV3_advertiser_spAdvertisedProductETL(conn)
  1622. # ac_etl.reportV3_asin_spPurchasedProductETL(conn)
  1623. conn.close()
  1624. ###