Data_ETL.py 107 KB

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