Data_ETL.py 107 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934
  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['expressions_type'] = df_targets['expressions'].map(
  476. lambda x: self.get_keyOvalue(x, 'type'))
  477. df_targets['expressions_value'] = df_targets['expressions'].map(
  478. lambda x: self.get_keyOvalue(x, 'value'))
  479. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x, 'type'))
  480. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpressions'].map(lambda x:self.get_keyOvalue(x, 'value'))
  481. return self.columnsName_modify(df_targets)
  482. def budget_ETL(self, campaign_ids: list):
  483. list_budget = self.get_budget(campaignIds=campaign_ids)['success']
  484. df_budget = pd.json_normalize(list_budget)
  485. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  486. return self.columnsName_modify(df_budget)
  487. def reportV3_campaign_sbCampaigns_ETL(self, conn, params:dict=None):
  488. print(params)
  489. timeZone_,today = self.today_()
  490. params = self.config_params(params)
  491. params['reportType'] = "sbCampaigns" #sbCampaigns
  492. params['columns'] = ['campaignId',
  493. 'campaignName','campaignBudgetAmount', 'campaignBudgetCurrencyCode', 'campaignBudgetType', 'topOfSearchImpressionShare',
  494. 'addToCart', 'addToCartClicks', 'addToCartRate', 'brandedSearches', 'brandedSearchesClicks',
  495. 'campaignBudgetAmount', 'campaignBudgetCurrencyCode', 'campaignBudgetType', 'campaignStatus', 'clicks', 'cost',
  496. 'costType', 'date', 'detailPageViews','detailPageViewsClicks', 'eCPAddToCart', 'endDate', 'impressions', 'newToBrandDetailPageViewRate',
  497. 'newToBrandDetailPageViews', 'newToBrandDetailPageViewsClicks', 'newToBrandECPDetailPageView',
  498. 'newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandPurchasesPercentage',
  499. 'newToBrandPurchasesRate', 'newToBrandSales', 'newToBrandSalesClicks', 'newToBrandSalesPercentage',
  500. 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks', 'newToBrandUnitsSoldPercentage', 'purchases',
  501. 'purchasesClicks', 'purchasesPromoted', 'sales', 'salesClicks', 'salesPromoted', 'startDate',
  502. 'topOfSearchImpressionShare', 'unitsSold', 'unitsSoldClicks', 'video5SecondViewRate',
  503. 'video5SecondViews', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews',
  504. 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate', 'viewableImpressions',
  505. 'viewClickThroughRate'
  506. ] # 'startDate', 'endDate',
  507. params['groupby'] = ['campaign']
  508. params['timeUnit'] = 'DAILY'
  509. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  510. columns=params['columns'], startDate=params['startDate'],
  511. endDate=params['endDate'], reportType=params['reportType'])
  512. # print(list_report)
  513. df_report = pd.json_normalize(list_report)
  514. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  515. # print(df_report)
  516. # conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
  517. # time.sleep(0.05)
  518. # print("插入完成SB_sbPurchasedProduct_asinV3")
  519. df_rel = df_report[params['columns']]
  520. return df_rel
  521. def reportV3_purchasedAsinRecord_ETL(self, conn, params:dict=None):
  522. print(params)
  523. timeZone_,today = self.today_()
  524. params = self.config_params(params)
  525. params['reportType'] = "sbPurchasedProduct"
  526. params['columns'] = [
  527. 'campaignId', 'adGroupId', 'date', 'campaignBudgetCurrencyCode', 'campaignName', 'adGroupName',
  528. 'attributionType', 'purchasedAsin', 'productName', 'productCategory', 'sales14d', 'orders14d',
  529. 'unitsSold14d',
  530. 'newToBrandSales14d', 'newToBrandPurchases14d', 'newToBrandUnitsSold14d', 'newToBrandSalesPercentage14d',
  531. 'newToBrandPurchasesPercentage14d', 'newToBrandUnitsSoldPercentage14d'
  532. ] # 'startDate', 'endDate',
  533. params['groupby'] = ['purchasedAsin']
  534. params['timeUnit'] = 'DAILY'
  535. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  536. columns=params['columns'], startDate=params['startDate'],
  537. endDate=params['endDate'], reportType=params['reportType'])
  538. # print(list_report)
  539. df_report = pd.json_normalize(list_report)
  540. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  541. # print(df_report)
  542. conn.insert_df("AmazonReport.SB_sbPurchasedProduct_asinV3", df_report[params['columns']])
  543. time.sleep(0.05)
  544. print("插入完成SB_sbPurchasedProduct_asinV3")
  545. df_rel = df_report[params['columns']]
  546. return df_rel
  547. def reportV2_campaignsRecord_ETL(self, conn, params:dict=None):
  548. print(params)
  549. timeZone_,today = self.today_()
  550. params = self.config_params(params)
  551. params['record_type'] = 'campaigns'
  552. metric = ['campaignId','campaignName', 'impressions', 'clicks', 'cost',
  553. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
  554. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  555. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  556. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  557. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  558. 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
  559. 'dpv14d','topOfSearchImpressionShare','unitsSold14d'
  560. ]
  561. # print(metric)
  562. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  563. metrics=metric)
  564. # print(list_report)
  565. df_report = pd.json_normalize(list_report)
  566. date = datetime.strptime(params['date'], '%Y%m%d')
  567. df_report['date'] = date
  568. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  569. conn.insert_df("AmazonReport.SB_campaignsV2", df_report[metric])
  570. time.sleep(0.05)
  571. print("插入完成SB_campaignsV2")
  572. df_rel = df_report[metric]
  573. return df_rel
  574. def reportV2_campaignsVideo_ETL(self, conn, params:dict=None):
  575. print(params)
  576. timeZone_,today = self.today_()
  577. params = self.config_params(params)
  578. params['record_type'] = 'campaigns'
  579. metric = [
  580. 'campaignId','campaignName','impressions','clicks','cost',
  581. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  582. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  583. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  584. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  585. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  586. 'currency','dpv14d','topOfSearchImpressionShare','vctr','vtr','video5SecondViewRate','video5SecondViews',
  587. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  588. 'viewableImpressions'
  589. ]
  590. # print(metric)
  591. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  592. metrics=metric, creative_type='video')
  593. # print(list_report)
  594. df_report = pd.json_normalize(list_report)
  595. date = datetime.strptime(params['date'], '%Y%m%d')
  596. df_report['date'] = date
  597. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  598. conn.insert_df("AmazonReport.SB_campaignsVideoV2", df_report[metric])
  599. time.sleep(0.05)
  600. print("插入完成SB_campaignsVideoV2")
  601. # print(df_report[metric].info())
  602. df_rel = df_report[metric]
  603. return df_rel
  604. def reportV2_placementRecord_ETL(self, conn, params:dict=None):
  605. print(params)
  606. timeZone_,today = self.today_()
  607. params = self.config_params(params)
  608. params['record_type'] = 'campaigns'
  609. metric = ['campaignId','campaignName','impressions','clicks','cost',
  610. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName',
  611. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  612. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  613. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
  614. 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  615. 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','unitsSold14d'
  616. ] # 'placement'
  617. # print(metric)
  618. # print(date)
  619. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  620. metrics=metric, segment='placement')
  621. df_report = pd.json_normalize(list_report)
  622. date = datetime.strptime(params['date'], '%Y%m%d')
  623. df_report['date'] = date
  624. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['placement'])
  625. conn.insert_df("AmazonReport.SB_campaignsPlacementV2", df_report[metric])
  626. time.sleep(0.05)
  627. print("插入完成SB_campaignsPlacementV2")
  628. # print(df_report[metric].info())
  629. df_rel = df_report[metric]
  630. return df_rel
  631. def reportV2_placementVideo_ETL(self, conn, params:dict=None):
  632. timeZone_,today = self.today_()
  633. params = self.config_params(params)
  634. params['record_type'] = 'campaigns'
  635. metric = [
  636. 'campaignId','campaignName','impressions','clicks','cost',
  637. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  638. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  639. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  640. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  641. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  642. 'currency','dpv14d','vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews',
  643. 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  644. ] # 'placement'
  645. # print(date)
  646. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  647. metrics=metric, segment='placement', creative_type='video')
  648. # print(list_report)
  649. df_report = pd.json_normalize(list_report)
  650. date = datetime.strptime(params['date'], '%Y%m%d')
  651. df_report['date'] = date
  652. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['placement'])
  653. # print(df_report.info())
  654. conn.insert_df("AmazonReport.SB_campaignsPlacementVideoV2", df_report[metric])
  655. time.sleep(0.05)
  656. print("插入完成SB_campaignsPlacementVideoV2")
  657. df_rel = df_report[metric]
  658. return df_rel
  659. def reportV2_adGroupsRecord_ETL(self, conn, params:dict=None):
  660. timeZone_,today = self.today_()
  661. params = self.config_params(params)
  662. params['record_type'] = 'adGroups'
  663. metric = [
  664. 'campaignId','campaignName','adGroupId','adGroupName','impressions', 'clicks', 'cost',
  665. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  666. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  667. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  668. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  669. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  670. 'dpv14d','unitsSold14d',
  671. ] #
  672. # print(date)
  673. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  674. metrics=metric)
  675. # print(list_report)
  676. df_report = pd.json_normalize(list_report)
  677. date = datetime.strptime(params['date'], '%Y%m%d')
  678. df_report['date'] = date
  679. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  680. # print(df_report.info())
  681. conn.insert_df("AmazonReport.SB_adGroupsV2", df_report[metric])
  682. time.sleep(0.05)
  683. print("插入完成SB_adGroupsV2")
  684. df_rel = df_report[metric]
  685. return df_rel
  686. def reportV2_adGroupsVideo_ETL(self, conn, params:dict=None):
  687. timeZone_,today = self.today_()
  688. params = self.config_params(params)
  689. params['record_type'] = 'adGroups'
  690. metric = [
  691. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  692. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  693. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  694. 'attributedOrdersNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  695. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  696. 'campaignBudget','campaignBudgetType','campaignStatus','currency','vctr','vtr','video5SecondViewRate',
  697. 'video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
  698. 'videoUnmutes','viewableImpressions','dpv14d'
  699. ] #
  700. # print(date)
  701. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  702. metrics=metric, creative_type='video')
  703. # print(list_report)
  704. df_report = pd.json_normalize(list_report)
  705. date = datetime.strptime(params['date'], '%Y%m%d')
  706. df_report['date'] = date
  707. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  708. # print(df_report.info())
  709. conn.insert_df("AmazonReport.SB_adGroupsVideoV2", df_report[metric])
  710. time.sleep(0.05)
  711. print("插入完成SB_adGroupsVideoV2")
  712. df_rel = df_report[metric]
  713. return df_rel
  714. def reportV2_targetsRecord_ETL(self, conn, params:dict=None):
  715. timeZone_,today = self.today_()
  716. params = self.config_params(params)
  717. params['record_type'] = 'targets'
  718. metric = [
  719. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions', 'clicks', 'cost',
  720. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  721. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  722. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  723. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  724. 'campaignBudgetType','campaignStatus','dpv14d','targetingExpression','targetingType',
  725. 'topOfSearchImpressionShare','unitsSold14d'
  726. ] #
  727. # print(date)
  728. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  729. metrics=metric)
  730. # print(list_report)
  731. df_report = pd.json_normalize(list_report)
  732. date = datetime.strptime(params['date'], '%Y%m%d')
  733. df_report['date'] = date
  734. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  735. # print(df_report.info())
  736. conn.insert_df("AmazonReport.SB_targetsV2", df_report[metric])
  737. time.sleep(0.05)
  738. print("插入完成SB_targetsV2")
  739. df_rel = df_report[metric]
  740. return df_rel
  741. def reportV2_targetsVideo_ETL(self, conn, params:dict=None):
  742. timeZone_,today = self.today_()
  743. params = self.config_params(params)
  744. params['record_type'] = 'targets'
  745. metric = [
  746. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  747. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  748. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  749. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  750. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  751. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType','campaignStatus',
  752. 'currency','dpv14d','targetingExpression','targetingType','topOfSearchImpressionShare','vctr','vtr',
  753. 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews','videoMidpointViews',
  754. 'videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  755. ] #
  756. # print(date)
  757. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  758. metrics=metric, creative_type='video')
  759. # print(list_report)
  760. df_report = pd.json_normalize(list_report)
  761. date = datetime.strptime(params['date'], '%Y%m%d')
  762. df_report['date'] = date
  763. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  764. # print(df_report.info())
  765. conn.insert_df("AmazonReport.SB_targetsVideoV2", df_report[metric])
  766. time.sleep(0.05)
  767. print("插入完成SB_targetsVideoV2")
  768. df_rel = df_report[metric]
  769. return df_rel
  770. def reportV2_keywordsRecord_ETL(self, conn, params:dict=None):
  771. timeZone_,today = self.today_()
  772. params = self.config_params(params)
  773. params['record_type'] = 'keywords'
  774. metric = [
  775. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  776. 'attributedBrandedSearches14d','applicableBudgetRuleId','applicableBudgetRuleName','attributedConversions14d',
  777. 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
  778. 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  779. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  780. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget',
  781. 'campaignBudgetType','campaignRuleBasedBudget','campaignStatus','dpv14d','keywordBid','keywordStatus',
  782. 'matchType','searchTermImpressionRank','searchTermImpressionShare','topOfSearchImpressionShare','unitsSold14d',
  783. ] #
  784. # print(date)
  785. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  786. metrics=metric)
  787. # print(list_campaigns_report)
  788. df_report = pd.json_normalize(list_report)
  789. date = datetime.strptime(params['date'], '%Y%m%d')
  790. df_report['date'] = date
  791. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  792. # print(df_report.info())
  793. conn.insert_df("AmazonReport.SB_keywordsV2", df_report[metric])
  794. time.sleep(0.05)
  795. print("插入完成SB_keywordsV2")
  796. df_rel = df_report[metric]
  797. return df_rel
  798. def reportV2_keywordsVideo_ETL(self, conn, params:dict=None):
  799. timeZone_,today = self.today_()
  800. params = self.config_params(params)
  801. params['record_type'] = 'keywords'
  802. metric = [
  803. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  804. 'attributedBrandedSearches14d','attributedConversions14d','attributedConversions14dSameSKU',
  805. 'attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d',
  806. 'attributedOrdersNewToBrandPercentage14d','attributedSales14d','attributedSales14dSameSKU',
  807. 'attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  808. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
  809. 'campaignStatus','currency','dpv14d','keywordBid','keywordStatus','matchType','topOfSearchImpressionShare',
  810. 'vctr','vtr','video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
  811. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  812. ] #
  813. # print(date)
  814. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  815. metrics=metric, creative_type='video')
  816. # print(list_campaigns_report)
  817. df_report = pd.json_normalize(list_report)
  818. date = datetime.strptime(params['date'], '%Y%m%d')
  819. df_report['date'] = date
  820. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  821. # print(df_report.info())
  822. conn.insert_df("AmazonReport.SB_keywordsVideoV2", df_report[metric])
  823. time.sleep(0.05)
  824. print("插入完成SB_keywordsVideoV2")
  825. df_rel = df_report[metric]
  826. return df_rel
  827. def reportV2_searchtermsRecord_ETL(self, conn, params:dict=None):
  828. timeZone_,today = self.today_()
  829. params = self.config_params(params)
  830. params['record_type'] = 'keywords'
  831. metric = [
  832. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions', 'clicks', 'cost',
  833. 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus','keywordBid',
  834. 'keywordStatus','matchType','searchTermImpressionRank','searchTermImpressionShare'
  835. ] #
  836. # print(date)
  837. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  838. metrics=metric, segment='query')
  839. # print(list_report)
  840. df_report = pd.json_normalize(list_report)
  841. date = datetime.strptime(params['date'], '%Y%m%d')
  842. df_report['date'] = date
  843. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['query'])
  844. # print(df_report.info())
  845. conn.insert_df("AmazonReport.SB_keywordsQueryV2", df_report[metric])
  846. time.sleep(0.05)
  847. print("插入完成SB_keywordsQueryV2")
  848. df_rel = df_report[metric]
  849. return df_rel
  850. def reportV2_searchtermsVideo_ETL(self, conn, params:dict=None):
  851. timeZone_,today = self.today_()
  852. params = self.config_params(params)
  853. params['record_type'] = 'keywords'
  854. metric = [
  855. 'campaignId','campaignName','adGroupId','adGroupName','keywordId','keywordText','impressions','clicks','cost',
  856. 'attributedConversions14d','attributedSales14d','campaignBudget','campaignBudgetType','campaignStatus',
  857. 'keywordBid','keywordStatus','matchType','vctr','vtr','video5SecondViewRate','video5SecondViews',
  858. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews',
  859. 'videoUnmutes','viewableImpressions',
  860. ] # 'query','currency'
  861. # print(date)
  862. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  863. metrics=metric, segment='query', creative_type='video')
  864. # print(list_report)
  865. df_report = pd.json_normalize(list_report)
  866. date = datetime.strptime(params['date'], '%Y%m%d')
  867. df_report['date'] = date
  868. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['query'])
  869. # print(df_report.info())
  870. conn.insert_df("AmazonReport.SB_keywordsQueryVideoV2", df_report[metric])
  871. time.sleep(0.05)
  872. print("插入完成SB_keywordsQueryVideoV2")
  873. df_rel = df_report[metric]
  874. return df_rel
  875. def reportV2_adsRecord_ETL(self, conn, params:dict=None):
  876. timeZone_,today = self.today_()
  877. params = self.config_params(params)
  878. params['record_type'] = 'ads'
  879. metric = [
  880. 'campaignId','campaignName','adGroupId','adGroupName','adId','impressions','clicks','cost',
  881. 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d','attributedConversions14d',
  882. 'attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d','attributedOrderRateNewToBrand14d',
  883. 'attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d','attributedSales14d',
  884. 'attributedSales14dSameSKU','attributedSalesNewToBrand14d','attributedSalesNewToBrandPercentage14d',
  885. 'attributedUnitsOrderedNewToBrand14d','attributedUnitsOrderedNewToBrandPercentage14d',
  886. 'campaignBudget','campaignBudgetType','campaignRuleBasedBudget','campaignStatus',
  887. 'dpv14d','unitsSold14d','vctr',
  888. ] #
  889. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  890. metrics=metric)
  891. df_report = pd.json_normalize(list_report)
  892. date = datetime.strptime(params['date'], '%Y%m%d')
  893. df_report['date'] = date
  894. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  895. conn.insert_df("AmazonReport.SB_adsV2", df_report[metric])
  896. time.sleep(0.05)
  897. print("插入完成SB_adsV2")
  898. df_rel = df_report[metric]
  899. return df_rel
  900. def reportV2_adsVideo_ETL(self, conn, params:dict=None):
  901. timeZone_,today = self.today_()
  902. params = self.config_params(params)
  903. params['record_type'] = 'ads'
  904. metric = [
  905. 'campaignId','campaignName','adGroupId','adGroupName','adId', 'impressions', 'clicks', 'cost',
  906. 'applicableBudgetRuleId','applicableBudgetRuleName','attributedBrandedSearches14d',
  907. 'attributedConversions14d','attributedConversions14dSameSKU','attributedDetailPageViewsClicks14d',
  908. 'attributedOrderRateNewToBrand14d','attributedOrdersNewToBrand14d','attributedOrdersNewToBrandPercentage14d',
  909. 'attributedSales14d','attributedSales14dSameSKU','attributedSalesNewToBrand14d',
  910. 'attributedSalesNewToBrandPercentage14d','attributedUnitsOrderedNewToBrand14d',
  911. 'attributedUnitsOrderedNewToBrandPercentage14d','campaignBudget','campaignBudgetType',
  912. 'campaignRuleBasedBudget','campaignStatus','currency','dpv14d','vctr','vtr',
  913. 'video5SecondViewRate','video5SecondViews','videoCompleteViews','videoFirstQuartileViews',
  914. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes','viewableImpressions',
  915. ] #
  916. # print(date)
  917. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  918. metrics=metric, creative_type='video')
  919. # print(list_report)
  920. df_report = pd.json_normalize(list_report)
  921. date = datetime.strptime(params['date'], '%Y%m%d')
  922. df_report['date'] = date
  923. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=[])
  924. # print(df_report.info())
  925. conn.insert_df("AmazonReport.SB_adsVideoV2", df_report[metric])
  926. time.sleep(0.05)
  927. print("插入完成SB_adsVideoV2")
  928. df_rel = df_report[metric]
  929. return df_rel
  930. class SD_ETL(SDClient, Common_ETLMethod):
  931. def campaigns_ETL(self):
  932. list_campaign_SD = self.get_campaigns()
  933. df_campaign = pd.json_normalize(list_campaign_SD)
  934. df_campaign['startDate'] = df_campaign['startDate'].map(
  935. lambda x: datetime.strptime(x, "%Y%m%d").date()) # 转换为标准时间格式
  936. df_campaign['portfolioId'] = df_campaign['portfolioId'].fillna(-1).astype("int64") # 将portfolio列为空的填充为-1
  937. return self.columnsName_modify(df_campaign)
  938. def adGroups_ETL(self, **param):
  939. list_adGroups_SD = [row for _ in list(self.iter_adGroups(**param)) for row in _]
  940. df_adGroups_SD = pd.json_normalize(list_adGroups_SD)
  941. tactic = {"T00020": "Contextual targeting", "T00030": "Audiences targeting"}
  942. df_adGroups_SD["tactic_type"] = df_adGroups_SD['tactic'].map(tactic) # T00020、T00030解释字段
  943. return self.columnsName_modify(df_adGroups_SD)
  944. def ads_ETL(self):
  945. list_ads_SD = [row for _ in list(self.iter_ads()) for row in _]
  946. df_ads_SD = pd.json_normalize(list_ads_SD)
  947. return self.columnsName_modify(df_ads_SD)
  948. def targets_ETL(self, **param):
  949. list_targets = [row for _ in list(self.iter_targets(**param)) for row in _]
  950. df_targets = pd.json_normalize(list_targets)
  951. # df_targets = self.expression_split(df_targets, "resolvedExpression")
  952. df_targets = self.id_type_trans(df_targets)
  953. df_targets['resolvedExpressions_type'] = df_targets['resolvedExpression'].map(lambda x:self.get_keyOvalue(x,'type'))
  954. df_targets['resolvedExpressions_value'] = df_targets['resolvedExpression'].map(lambda x:self.get_keyOvalue(x,'value'))
  955. return self.columnsName_modify(df_targets)
  956. def budget_ETL(self, campaignsIds: list):
  957. list_budget = self.get_budget(campaignIds=campaignsIds)['success']
  958. df_budget = pd.json_normalize(list_budget)
  959. df_budget = self.TZ_Deal(df_budget, ["usageUpdatedTimestamp"])
  960. return self.columnsName_modify(df_budget)
  961. def reportV3_campaign_sdCampaigns_ETL(self, conn, params:dict=None):
  962. timeZone_,today = self.today_()
  963. params = self.config_params(params)
  964. params['reportType'] = "sdCampaigns"
  965. params['columns'] = [ 'campaignName', 'campaignId','campaignStatus','campaignBudgetAmount', 'impressions','clicks', 'cost',
  966. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  967. 'brandedSearches', 'brandedSearchesClicks','brandedSearchesViews', 'brandedSearchRate',
  968. 'costType', 'cumulativeReach','detailPageViews', 'detailPageViewsClicks','eCPAddToCart', 'eCPBrandSearch',
  969. 'newToBrandDetailPageViewClicks','newToBrandDetailPageViewRate', 'newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView',
  970. 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks','newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  971. 'campaignBudgetCurrencyCode','date',
  972. 'impressionsViews','impressionsFrequencyAverage', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
  973. 'sales','salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews',
  974. 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate','viewClickThroughRate'
  975. ] # 'startDate', 'endDate',
  976. params['groupby'] = ['campaign']
  977. params['timeUnit'] = 'DAILY'
  978. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  979. columns=params['columns'], startDate=params['startDate'],
  980. endDate=params['endDate'], reportType=params['reportType'])
  981. # print(list_report)
  982. df_report = pd.json_normalize(list_report)
  983. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  984. # print(df_report.columns)
  985. conn.insert_df("AmazonReport.SD_sdCampaigns_campaignV3", df_report[params['columns']])
  986. time.sleep(0.05)
  987. print("插入完成SD_sdCampaigns_campaignV3")
  988. df_rel = df_report[params['columns']]
  989. return df_rel
  990. def reportV3_campaignMT_sdCampaigns_ETL(self, conn, params:dict=None):
  991. timeZone_,today = self.today_()
  992. params = self.config_params(params)
  993. params['reportType'] = "sdCampaigns"
  994. params['columns'] = [
  995. 'matchedTargetAsin','campaignName', 'campaignId','campaignStatus','campaignBudgetAmount', 'impressions','clicks', 'cost',
  996. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  997. 'brandedSearches', 'brandedSearchesClicks','brandedSearchesViews', 'brandedSearchRate',
  998. 'costType', 'detailPageViews', 'detailPageViewsClicks','eCPAddToCart', 'eCPBrandSearch',
  999. 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks','newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1000. 'campaignBudgetCurrencyCode','date',
  1001. 'impressionsViews', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
  1002. 'sales','salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews',
  1003. 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate','viewClickThroughRate'
  1004. ] # 'startDate', 'endDate',
  1005. params['groupby'] = ['campaign',"matchedTarget"]
  1006. params['timeUnit'] = 'DAILY'
  1007. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1008. columns=params['columns'], startDate=params['startDate'],
  1009. endDate=params['endDate'], reportType=params['reportType'])
  1010. # print(list_report)
  1011. df_report = pd.json_normalize(list_report)
  1012. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1013. # print(df_report.columns)
  1014. conn.insert_df("AmazonReport.SD_sdCampaigns_campaignMatchedTargetV3", df_report[params['columns']])
  1015. time.sleep(0.05)
  1016. print("插入完成SD_sdCampaigns_campaignMatchedTargetV3")
  1017. df_rel = df_report[params['columns']]
  1018. return df_rel
  1019. def reportV3_adgroup_sdAdGroup_ETL(self, conn, params:dict=None):
  1020. timeZone_,today = self.today_()
  1021. params = self.config_params(params)
  1022. params['reportType'] = "sdAdGroup"
  1023. params['columns'] = ['campaignName','campaignId', 'adGroupName', 'adGroupId', 'impressions','clicks', 'cost',
  1024. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1025. 'bidOptimization','brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1026. 'cumulativeReach','detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart','eCPBrandSearch',
  1027. 'newToBrandDetailPageViewClicks', 'newToBrandDetailPageViewRate','newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView',
  1028. 'newToBrandSales', 'newToBrandPurchases', 'newToBrandPurchasesClicks','newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1029. 'campaignBudgetCurrencyCode','date', 'impressionsViews', 'impressionsFrequencyAverage', 'purchases',
  1030. 'purchasesClicks', 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'unitsSold',
  1031. 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1032. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1033. ] # 'startDate', 'endDate',
  1034. params['groupby'] = ['adGroup']
  1035. params['timeUnit'] = 'DAILY'
  1036. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1037. columns=params['columns'], startDate=params['startDate'],
  1038. endDate=params['endDate'], reportType=params['reportType'])
  1039. # print(list_report)
  1040. df_report = pd.json_normalize(list_report)
  1041. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1042. # print(df_report)
  1043. conn.insert_df("AmazonReport.SD_sdAdGroup_adGroupV3", df_report[params['columns']])
  1044. time.sleep(0.05)
  1045. print("插入完成SD_sdAdGroup_adGroupV3")
  1046. df_rel = df_report[params['columns']]
  1047. return df_rel
  1048. def reportV3_adgroupMT_sdAdGroup_ETL(self, conn, params:dict=None):
  1049. timeZone_,today = self.today_()
  1050. params = self.config_params(params)
  1051. params['reportType'] = "sdAdGroup"
  1052. params['columns'] = [
  1053. 'matchedTargetAsin','campaignName','campaignId', 'adGroupName', 'adGroupId', 'impressions','clicks', 'cost',
  1054. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1055. 'bidOptimization','brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1056. 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart','eCPBrandSearch',
  1057. 'newToBrandSales', 'newToBrandPurchases', 'newToBrandPurchasesClicks','newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1058. 'campaignBudgetCurrencyCode','date', 'impressionsViews', 'purchases',
  1059. 'purchasesClicks', 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'unitsSold',
  1060. 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1061. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1062. ] # 'startDate', 'endDate',
  1063. params['groupby'] = ['adGroup',"matchedTarget"]
  1064. params['timeUnit'] = 'DAILY'
  1065. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1066. columns=params['columns'], startDate=params['startDate'],
  1067. endDate=params['endDate'], reportType=params['reportType'])
  1068. # print(list_report)
  1069. df_report = pd.json_normalize(list_report)
  1070. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1071. # print(df_report)
  1072. conn.insert_df("AmazonReport.SD_sdAdGroup_adGroupMatchedTargetV3", df_report[params['columns']])
  1073. time.sleep(0.05)
  1074. print("插入完成SD_sdAdGroup_adGroupMatchedTargetV3")
  1075. df_rel = df_report[params['columns']]
  1076. return df_rel
  1077. def reportV3_targeting_sdTargeting_ETL(self, conn, params:dict=None):
  1078. timeZone_,today = self.today_()
  1079. params = self.config_params(params)
  1080. params['reportType'] = "sdTargeting"
  1081. params['columns'] = ['campaignName', 'campaignId','adGroupName','adGroupId', 'targetingText','targetingId','impressions','clicks', 'cost',
  1082. 'adKeywordStatus', 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1083. 'brandedSearches',
  1084. 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1085. 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart', 'eCPBrandSearch',
  1086. 'newToBrandDetailPageViewClicks', 'newToBrandDetailPageViewRate', 'newToBrandDetailPageViews',
  1087. 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView','newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks',
  1088. 'newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1089. 'campaignBudgetCurrencyCode',
  1090. 'date',
  1091. 'impressionsViews', 'purchases', 'purchasesClicks',
  1092. 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'targetingExpression',
  1093. 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews','videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1094. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1095. ] # 'startDate', 'endDate',
  1096. params['groupby'] = ['targeting']
  1097. params['timeUnit'] = 'DAILY'
  1098. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1099. columns=params['columns'], startDate=params['startDate'],
  1100. endDate=params['endDate'], reportType=params['reportType'])
  1101. # print(list_report)
  1102. df_report = pd.json_normalize(list_report)
  1103. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1104. # print(df_report)
  1105. conn.insert_df("AmazonReport.SD_targeting_sdTargetingV3", df_report[params['columns']])
  1106. time.sleep(0.05)
  1107. print("插入完成SD_targeting_sdTargetingV3")
  1108. df_rel = df_report[params['columns']]
  1109. return df_rel
  1110. def reportV3_targetingMT_sdTargeting_ETL(self, conn, params:dict=None):
  1111. timeZone_,today = self.today_()
  1112. params = self.config_params(params)
  1113. params['reportType'] = "sdTargeting"
  1114. params['columns'] = [
  1115. 'matchedTargetAsin',
  1116. 'campaignName', 'campaignId','adGroupName','adGroupId', 'targetingText','targetingId','impressions','clicks', 'cost',
  1117. 'adKeywordStatus', 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews',
  1118. 'brandedSearches',
  1119. 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1120. 'detailPageViews', 'detailPageViewsClicks', 'eCPAddToCart', 'eCPBrandSearch',
  1121. 'newToBrandSales','newToBrandPurchases', 'newToBrandPurchasesClicks',
  1122. 'newToBrandSalesClicks', 'newToBrandUnitsSold', 'newToBrandUnitsSoldClicks',
  1123. 'campaignBudgetCurrencyCode',
  1124. 'date',
  1125. 'impressionsViews', 'purchases', 'purchasesClicks',
  1126. 'purchasesPromotedClicks', 'sales', 'salesClicks', 'salesPromotedClicks', 'targetingExpression',
  1127. 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews','videoFirstQuartileViews', 'videoMidpointViews', 'videoThirdQuartileViews',
  1128. 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1129. ] # 'startDate', 'endDate',
  1130. params['groupby'] = ['targeting',"matchedTarget"]
  1131. params['timeUnit'] = 'DAILY'
  1132. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1133. columns=params['columns'], startDate=params['startDate'],
  1134. endDate=params['endDate'], reportType=params['reportType'])
  1135. # print(list_report)
  1136. df_report = pd.json_normalize(list_report)
  1137. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1138. # print(df_report)
  1139. conn.insert_df("AmazonReport.SD_targeting_sdTargetingMatchedTargetV3", df_report[params['columns']])
  1140. time.sleep(0.05)
  1141. print("插入完成SD_targeting_sdTargetingMatchedTargetV3")
  1142. df_rel = df_report[params['columns']]
  1143. return df_rel
  1144. def reportV3_advertiser_sdAdvertisedProduct_ETL(self, conn, params:dict=None):
  1145. timeZone_,today = self.today_()
  1146. params = self.config_params(params)
  1147. params['reportType'] = "sdAdvertisedProduct"
  1148. params['columns'] = ['campaignName','campaignId','adGroupName','adGroupId','adId','impressions','clicks', 'cost',
  1149. 'addToCart', 'addToCartClicks', 'addToCartRate', 'addToCartViews', 'bidOptimization',
  1150. 'brandedSearches', 'brandedSearchesClicks', 'brandedSearchesViews', 'brandedSearchRate',
  1151. 'detailPageViews', 'detailPageViewsClicks','eCPAddToCart',
  1152. 'eCPBrandSearch','newToBrandDetailPageViewClicks',
  1153. 'newToBrandDetailPageViewRate', 'newToBrandDetailPageViews', 'newToBrandDetailPageViewViews', 'newToBrandECPDetailPageView','newToBrandSales',
  1154. 'newToBrandPurchases', 'newToBrandPurchasesClicks', 'newToBrandSalesClicks', 'newToBrandUnitsSold',
  1155. 'newToBrandUnitsSoldClicks',
  1156. 'campaignBudgetCurrencyCode',
  1157. 'cumulativeReach', 'date', 'impressionsFrequencyAverage', 'impressionsViews', 'promotedAsin', 'promotedSku', 'purchases', 'purchasesClicks', 'purchasesPromotedClicks',
  1158. 'sales',
  1159. 'salesClicks', 'salesPromotedClicks', 'unitsSold', 'unitsSoldClicks', 'videoCompleteViews', 'videoFirstQuartileViews',
  1160. 'videoMidpointViews', 'videoThirdQuartileViews', 'videoUnmutes', 'viewabilityRate', 'viewClickThroughRate'
  1161. ] # 'startDate', 'endDate',
  1162. params['groupby'] = ['advertiser']
  1163. params['timeUnit'] = 'DAILY'
  1164. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1165. columns=params['columns'], startDate=params['startDate'],
  1166. endDate=params['endDate'], reportType=params['reportType'])
  1167. # print(list_report)
  1168. df_report = pd.json_normalize(list_report)
  1169. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1170. # print(df_report)
  1171. conn.insert_df("AmazonReport.SD_advertiser_sdAdvertisedProductV3", df_report[params['columns']])
  1172. time.sleep(0.05)
  1173. print("插入完成SD_advertiser_sdAdvertisedProductV3")
  1174. df_rel = df_report[params['columns']]
  1175. return df_rel
  1176. def reportV3_asin_sdPurchasedProduct_ETL(self, conn, params:dict=None):
  1177. timeZone_,today = self.today_()
  1178. params = self.config_params(params)
  1179. params['reportType'] = "sdPurchasedProduct"
  1180. params['columns'] = ['campaignName','campaignId', 'adGroupName','adGroupId', 'promotedAsin', 'promotedSku',
  1181. 'asinBrandHalo', 'campaignBudgetCurrencyCode',
  1182. 'conversionsBrandHalo', 'conversionsBrandHaloClicks', 'date', 'salesBrandHalo',
  1183. 'salesBrandHaloClicks', 'unitsSoldBrandHalo', 'unitsSoldBrandHaloClicks'
  1184. ] # 'startDate', 'endDate',
  1185. params['groupby'] = ['asin']
  1186. params['timeUnit'] = 'DAILY'
  1187. list_report = self.get_v3_report(timeUnit=params['timeUnit'], groupby=params['groupby'],
  1188. columns=params['columns'], startDate=params['startDate'],
  1189. endDate=params['endDate'], reportType=params['reportType'])
  1190. # print(list_report)
  1191. df_report = pd.json_normalize(list_report)
  1192. df_report = self.type_trans(df_report, params['columns'], timeZone_, extra_columns=[])
  1193. # print(df_report)
  1194. conn.insert_df("AmazonReport.SD_asin_sdPurchasedProductV3", df_report[params['columns']])
  1195. time.sleep(0.05)
  1196. print("插入完成SD_asin_sdPurchasedProductV3")
  1197. df_rel = df_report[params['columns']]
  1198. return df_rel
  1199. campaigns_metrics = [
  1200. 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
  1201. 'attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1202. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
  1203. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1204. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
  1205. 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
  1206. 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1207. 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
  1208. 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d',
  1209. 'avgImpressionsFrequency','campaignBudget','campaignStatus','cumulativeReach','costType',
  1210. 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  1211. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
  1212. 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
  1213. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1214. ]
  1215. def reportV2_campaignsRecord_t2_ETL(self, conn, params:dict=None):
  1216. timeZone_,today = self.today_()
  1217. params = self.config_params(params)
  1218. params['record_type'] = 'campaigns'
  1219. metric = self.campaigns_metrics
  1220. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1221. metrics=metric, tactic="T00020")
  1222. # print(list_report)
  1223. df_report = pd.json_normalize(list_report)
  1224. date = datetime.strptime(params['date'], '%Y%m%d')
  1225. df_report['date'] = date
  1226. df_report['tactic'] = 'Contextual targeting'
  1227. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1228. conn.insert_df("AmazonReport.SD_campaignsV2", df_report[metric])
  1229. time.sleep(0.05)
  1230. print("插入完成SD_campaignsV2—")
  1231. df_rel = df_report[metric]
  1232. return df_rel
  1233. def reportV2_campaignsRecord_t3_ETL(self, conn, params:dict=None):
  1234. timeZone_,today = self.today_()
  1235. params = self.config_params(params)
  1236. params['record_type'] = 'campaigns'
  1237. metric = self.campaigns_metrics
  1238. print("tactic:t3")
  1239. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1240. metrics=metric, tactic="T00030")#
  1241. df_report = pd.json_normalize(list_report)
  1242. print(df_report.columns)
  1243. date = datetime.strptime(params['date'], '%Y%m%d')
  1244. df_report['date'] = date
  1245. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1246. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1247. conn.insert_df("AmazonReport.SD_campaignsV2", df_report[metric])
  1248. time.sleep(0.05)
  1249. print("插入完成SD_campaignsV2")
  1250. df_rel = df_report[metric]
  1251. return df_rel
  1252. adGroups_metrics = [
  1253. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  1254. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
  1255. 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
  1256. 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
  1257. 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
  1258. 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
  1259. 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1260. 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
  1261. 'attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency','bidOptimization','cumulativeReach',
  1262. 'currency','vctr','vtr', 'viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  1263. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d',
  1264. 'viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d',
  1265. 'videoCompleteViews','videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1266. ]
  1267. def reportV2_adGroupsRecord_t2_ETL(self, conn, params:dict=None):
  1268. timeZone_,today = self.today_()
  1269. params = self.config_params(params)
  1270. params['record_type'] = 'adGroups'
  1271. metric = self.adGroups_metrics
  1272. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1273. metrics=metric, tactic="T00020")
  1274. df_report = pd.json_normalize(list_report)
  1275. date = datetime.strptime(params['date'], '%Y%m%d')
  1276. df_report['date'] = date
  1277. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1278. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1279. conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[metric])
  1280. time.sleep(0.05)
  1281. print("插入完成SD_adGroupsV2")
  1282. df_rel = df_report[metric]
  1283. return df_rel
  1284. def reportV2_adGroupsRecord_t3_ETL(self, conn, params:dict=None):
  1285. timeZone_,today = self.today_()
  1286. params = self.config_params(params)
  1287. params['record_type'] = 'adGroups'
  1288. metric = self.adGroups_metrics
  1289. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1290. metrics=metric, tactic="T00020")
  1291. df_report = pd.json_normalize(list_report)
  1292. date = datetime.strptime(params['date'], '%Y%m%d')
  1293. df_report['date'] = date
  1294. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1295. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1296. # print(df_report.info())
  1297. conn.insert_df("AmazonReport.SD_adGroupsV2", df_report[metric])
  1298. time.sleep(0.05)
  1299. print("插入完成SD_adGroupsV2")
  1300. df_rel = df_report[metric]
  1301. return df_rel
  1302. productAds_metrics = [
  1303. 'campaignId','campaignName','adGroupId','adGroupName','adId','asin','sku', 'impressions', 'clicks','cost',
  1304. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1305. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU',
  1306. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1307. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU','attributedSales7d',
  1308. 'attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1309. 'attributedSales30dSameSKU','attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d',
  1310. 'attributedUnitsOrdered14d','attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','avgImpressionsFrequency',
  1311. 'cumulativeReach','currency','vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d',
  1312. 'viewAttributedSales14d','viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1313. 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews','videoFirstQuartileViews',
  1314. 'videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1315. ]
  1316. def reportV2_productAds_t2_ETL(self, conn, params:dict=None):
  1317. timeZone_,today = self.today_()
  1318. params = self.config_params(params)
  1319. params['record_type'] = 'productAds'
  1320. metric = self.productAds_metrics
  1321. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1322. metrics=metric, tactic="T00020")
  1323. # print(list_report)
  1324. df_report = pd.json_normalize(list_report)
  1325. date = datetime.strptime(params['date'], '%Y%m%d')
  1326. df_report['date'] = date
  1327. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1328. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1329. conn.insert_df("AmazonReport.SD_adsV2", df_report[metric])
  1330. time.sleep(0.05)
  1331. print("插入完成SD_adsV2")
  1332. df_rel = df_report[metric]
  1333. return df_rel
  1334. def reportV2_productAds_t3_ETL(self, conn, params:dict=None):
  1335. timeZone_,today = self.today_()
  1336. params = self.config_params(params)
  1337. params['record_type'] = 'productAds'
  1338. metric = self.productAds_metrics
  1339. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1340. metrics=metric, tactic="T00030")
  1341. # print(list_report)
  1342. df_report = pd.json_normalize(list_report)
  1343. date = datetime.strptime(params['date'], '%Y%m%d')
  1344. df_report['date'] = date
  1345. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1346. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1347. # print(df_report.info())
  1348. conn.insert_df("AmazonReport.SD_adsV2", df_report[metric])
  1349. time.sleep(0.05)
  1350. print("插入完成SD_adsV2")
  1351. df_rel = df_report[metric]
  1352. return df_rel
  1353. targets_metrics = [
  1354. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  1355. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU','attributedConversions7d',
  1356. 'attributedConversions7dSameSKU','attributedConversions14d','attributedConversions14dSameSKU','attributedConversions30d',
  1357. 'attributedConversions30dSameSKU','attributedDetailPageView14d','attributedOrdersNewToBrand14d',
  1358. 'attributedSales1d','attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU',
  1359. 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU',
  1360. 'attributedSalesNewToBrand14d','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
  1361. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType',
  1362. 'vctr','vtr','viewImpressions','viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
  1363. 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1364. 'viewAttributedUnitsOrderedNewToBrand14d','viewAttributedBrandedSearches14d','videoCompleteViews',
  1365. 'videoFirstQuartileViews','videoMidpointViews','videoThirdQuartileViews','videoUnmutes',
  1366. ]
  1367. def reportV2_targets_t2_ETL(self, conn, params:dict=None):
  1368. timeZone_,today = self.today_()
  1369. params = self.config_params(params)
  1370. params['record_type'] = 'targets'
  1371. metric = self.targets_metrics
  1372. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1373. metrics=metric, tactic="T00020")
  1374. # print(list_report)
  1375. df_report = pd.json_normalize(list_report)
  1376. date = datetime.strptime(params['date'], '%Y%m%d')
  1377. df_report['date'] = date
  1378. df_report['tactic'] = 'Contextual targeting' # {"T00020":"","T00030":"Audiences targeting"}
  1379. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1380. # print(df_report[metric].info())
  1381. conn.insert_df("AmazonReport.SD_targetsV2", df_report[metric])
  1382. time.sleep(0.05)
  1383. print("插入完成SD_targetsV2")
  1384. df_rel = df_report[metric]
  1385. return df_rel
  1386. def reportV2_targets_t3_ETL(self, conn, params:dict=None):
  1387. timeZone_,today = self.today_()
  1388. params = self.config_params(params)
  1389. params['record_type'] = 'targets'
  1390. metric = self.targets_metrics
  1391. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1392. metrics=metric, tactic="T00030")
  1393. # print(list_report)
  1394. df_report = pd.json_normalize(list_report)
  1395. date = datetime.strptime(params['date'], '%Y%m%d')
  1396. df_report['date'] = date
  1397. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1398. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1399. # print(df_report.info())
  1400. conn.insert_df("AmazonReport.SD_targetsV2", df_report[metric])
  1401. time.sleep(0.05)
  1402. print("插入完成SD_targetsV2")
  1403. df_rel = df_report[metric]
  1404. return df_rel
  1405. asins_metrics = [
  1406. 'campaignId','campaignName','adGroupId','adGroupName','asin','sku','attributedConversions1dOtherSKU',
  1407. 'attributedConversions7dOtherSKU','attributedConversions14dOtherSKU','attributedConversions30dOtherSKU',
  1408. 'attributedSales1dOtherSKU','attributedSales7dOtherSKU','attributedSales14dOtherSKU','attributedSales30dOtherSKU',
  1409. 'attributedUnitsOrdered1dOtherSKU','attributedUnitsOrdered7dOtherSKU','attributedUnitsOrdered14dOtherSKU',
  1410. 'attributedUnitsOrdered30dOtherSKU','currency','otherAsin','viewAttributedUnitsOrdered1dOtherSKU',
  1411. 'viewAttributedUnitsOrdered7dOtherSKU','viewAttributedUnitsOrdered14dOtherSKU','viewAttributedUnitsOrdered30dOtherSKU',
  1412. 'viewAttributedSales1dOtherSKU','viewAttributedSales7dOtherSKU','viewAttributedSales14dOtherSKU',
  1413. 'viewAttributedSales30dOtherSKU','viewAttributedConversions1dOtherSKU','viewAttributedConversions7dOtherSKU',
  1414. 'viewAttributedConversions14dOtherSKU','viewAttributedConversions30dOtherSKU',
  1415. ]
  1416. def reportV2_asins_t2_ETL(self, conn, params:dict=None):
  1417. timeZone_,today = self.today_()
  1418. params = self.config_params(params)
  1419. params['record_type'] = 'asins'
  1420. metric = self.asins_metrics
  1421. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1422. metrics=metric, tactic="T00020")
  1423. # print(list_report)
  1424. df_report = pd.json_normalize(list_report)
  1425. date = datetime.strptime(params['date'], '%Y%m%d')
  1426. df_report['date'] = date
  1427. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1428. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1429. # print(df_report.info())
  1430. conn.insert_df("AmazonReport.SD_asinsV2", df_report[metric])
  1431. time.sleep(0.05)
  1432. print("插入完成SD_asinsV2")
  1433. df_rel = df_report[metric]
  1434. return df_rel
  1435. def reportV2_asins_t3_ETL(self, conn, params:dict=None):
  1436. timeZone_,today = self.today_()
  1437. params = self.config_params(params)
  1438. params['record_type'] = 'asins'
  1439. metric = self.asins_metrics
  1440. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1441. metrics=metric, tactic="T00030")
  1442. # print(list_report)
  1443. df_report = pd.json_normalize(list_report)
  1444. date = datetime.strptime(params['date'], '%Y%m%d')
  1445. df_report['date'] = date
  1446. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1447. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['tactic'])
  1448. conn.insert_df("AmazonReport.SD_asinsV2", df_report[metric])
  1449. time.sleep(0.05)
  1450. print("插入完成SD_asinsV2")
  1451. df_rel = df_report[metric]
  1452. return df_rel
  1453. campaigns_MT_metrics = [
  1454. 'campaignId','campaignName','impressions','clicks','cost','attributedBrandedSearches14d',
  1455. 'attributedConversions1d','attributedConversions1dSameSKU', 'attributedConversions7d',
  1456. 'attributedConversions7dSameSKU', 'attributedConversions14d','attributedConversions14dSameSKU',
  1457. 'attributedConversions30d','attributedConversions30dSameSKU','attributedDetailPageView14d',
  1458. 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU', 'attributedSales7d',
  1459. 'attributedSales7dSameSKU', 'attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1460. 'attributedSales30dSameSKU','attributedSalesNewToBrand14d',
  1461. 'attributedUnitsOrdered1d', 'attributedUnitsOrdered7d', 'attributedUnitsOrdered14d',
  1462. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','campaignBudget',
  1463. 'campaignStatus','costType','currency', 'viewImpressions','viewAttributedBrandedSearches14d',
  1464. 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d',
  1465. 'viewAttributedUnitsOrdered14d','viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d',
  1466. 'viewAttributedUnitsOrderedNewToBrand14d',
  1467. ] # 'matchedTarget'
  1468. def reportV2_campaign_matchedTarget_t2_ETL(self, conn, params:dict=None):
  1469. timeZone_,today = self.today_()
  1470. params = self.config_params(params)
  1471. params['record_type'] = 'campaigns'
  1472. metric = self.campaigns_MT_metrics
  1473. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1474. metrics=metric, tactic="T00020", segment='matchedTarget')
  1475. # print(list_report)
  1476. df_report = pd.json_normalize(list_report)
  1477. date = datetime.strptime(params['date'], '%Y%m%d')
  1478. df_report['date'] = date
  1479. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1480. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1481. conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[metric])
  1482. time.sleep(0.05)
  1483. print("插入完成SD_campaignsMatchedTargetV2")
  1484. df_rel = df_report[metric]
  1485. return df_rel
  1486. def reportV2_campaign_matchedTarget_t3_ETL(self, conn, params:dict=None):
  1487. timeZone_,today = self.today_()
  1488. params = self.config_params(params)
  1489. params['record_type'] = 'campaigns'
  1490. metric = self.campaigns_MT_metrics
  1491. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1492. metrics=metric, tactic="T00030", segment='matchedTarget')
  1493. # print(list_report)
  1494. df_report = pd.json_normalize(list_report)
  1495. date = datetime.strptime(params['date'], '%Y%m%d')
  1496. df_report['date'] = date
  1497. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1498. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1499. conn.insert_df("AmazonReport.SD_campaignsMatchedTargetV2", df_report[metric])
  1500. time.sleep(0.05)
  1501. print("插入完成SD_campaignsMatchedTargetV2")
  1502. df_rel = df_report[metric]
  1503. return df_rel
  1504. adGroups_MT_metrics = [
  1505. 'campaignId','campaignName','adGroupId','adGroupName','impressions','clicks','cost',
  1506. 'attributedBrandedSearches14d','attributedConversions1d', 'attributedConversions1dSameSKU',
  1507. 'attributedConversions7d', 'attributedConversions7dSameSKU','attributedConversions14d',
  1508. 'attributedConversions14dSameSKU','attributedConversions30d','attributedConversions30dSameSKU',
  1509. 'attributedDetailPageView14d', 'attributedOrdersNewToBrand14d','attributedSales1d','attributedSales1dSameSKU',
  1510. 'attributedSales7d','attributedSales7dSameSKU','attributedSales14d','attributedSales14dSameSKU','attributedSales30d',
  1511. 'attributedSales30dSameSKU','attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d',
  1512. 'attributedUnitsOrdered30d','attributedUnitsOrderedNewToBrand14d','bidOptimization',
  1513. 'currency','viewImpressions','viewAttributedBrandedSearches14d','viewAttributedConversions14d',
  1514. 'viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
  1515. 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
  1516. ] # , 'matchedTarget'
  1517. def reportV2_adGroups_matchedTarget_t2_ETL(self, conn, params:dict=None):
  1518. timeZone_,today = self.today_()
  1519. params = self.config_params(params)
  1520. params['record_type'] = 'adGroups'
  1521. metric = self.adGroups_MT_metrics
  1522. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1523. metrics=metric, tactic="T00020", segment='matchedTarget')
  1524. # print(list_report)
  1525. df_report = pd.json_normalize(list_report)
  1526. date = datetime.strptime(params['date'], '%Y%m%d')
  1527. df_report['date'] = date
  1528. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1529. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1530. conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[metric])
  1531. time.sleep(0.05)
  1532. print("插入完成SD_adGroupsMatchedTargetV2")
  1533. df_rel = df_report[metric]
  1534. return df_rel
  1535. def reportV2_adGroups_matchedTarget_t3_ETL(self, conn, params:dict=None):
  1536. timeZone_,today = self.today_()
  1537. params = self.config_params(params)
  1538. params['record_type'] = 'adGroups'
  1539. metric = self.adGroups_MT_metrics
  1540. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1541. metrics=metric, tactic="T00030", segment='matchedTarget')
  1542. df_report = pd.json_normalize(list_report)
  1543. date = datetime.strptime(params['date'], '%Y%m%d')
  1544. df_report['date'] = date
  1545. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1546. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1547. conn.insert_df("AmazonReport.SD_adGroupsMatchedTargetV2", df_report[metric])
  1548. time.sleep(0.05)
  1549. print("插入完成SD_adGroupsMatchedTargetV2")
  1550. df_rel = df_report[metric]
  1551. return df_rel
  1552. targets_MT_metrics = [
  1553. 'campaignId','campaignName','adGroupId','adGroupName','targetId','targetingText','impressions','clicks','cost',
  1554. 'attributedBrandedSearches14d','attributedConversions1d','attributedConversions1dSameSKU',
  1555. 'attributedConversions7d','attributedConversions7dSameSKU','attributedConversions14d',
  1556. 'attributedConversions14dSameSKU','attributedConversions30d', 'attributedConversions30dSameSKU',
  1557. 'attributedDetailPageView14d','attributedOrdersNewToBrand14d','attributedSales1d',
  1558. 'attributedSales1dSameSKU','attributedSales7d','attributedSales7dSameSKU','attributedSales14d',
  1559. 'attributedSales14dSameSKU','attributedSales30d','attributedSales30dSameSKU','attributedSalesNewToBrand14d',
  1560. 'attributedUnitsOrdered1d','attributedUnitsOrdered7d','attributedUnitsOrdered14d','attributedUnitsOrdered30d',
  1561. 'attributedUnitsOrderedNewToBrand14d','currency','targetingExpression','targetingType','viewAttributedBrandedSearches14d',
  1562. 'viewAttributedConversions14d','viewAttributedDetailPageView14d','viewAttributedSales14d','viewAttributedUnitsOrdered14d',
  1563. 'viewAttributedOrdersNewToBrand14d','viewAttributedSalesNewToBrand14d','viewAttributedUnitsOrderedNewToBrand14d',
  1564. ]
  1565. def reportV2_targets_matchedTarget_t2_ETL(self, conn, params:dict=None):
  1566. timeZone_,today = self.today_()
  1567. params = self.config_params(params)
  1568. params['record_type'] = 'targets'
  1569. metric = self.targets_MT_metrics
  1570. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1571. metrics=metric, tactic="T00020", segment='matchedTarget')
  1572. df_report = pd.json_normalize(list_report)
  1573. date = datetime.strptime(params['date'], '%Y%m%d')
  1574. df_report['date'] = date
  1575. df_report['tactic'] = 'Contextual targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1576. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1577. conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[metric])
  1578. time.sleep(0.05)
  1579. print("插入完成SD_targetsMatchedTargetV2")
  1580. df_rel = df_report[metric]
  1581. return df_rel
  1582. def reportV2_targets_matchedTarget_t3_ETL(self, conn, params:dict=None):
  1583. timeZone_,today = self.today_()
  1584. params = self.config_params(params)
  1585. params['record_type'] = 'targets'
  1586. metric = self.targets_MT_metrics
  1587. list_report = self.get_v2_report(record_type=params['record_type'], report_date=params["date"],
  1588. metrics=metric, tactic="T00030", segment='matchedTarget')
  1589. df_report = pd.json_normalize(list_report)
  1590. date = datetime.strptime(params['date'], '%Y%m%d')
  1591. df_report['date'] = date
  1592. df_report['tactic'] = 'Audiences targeting' # {"T00020":"Contextual targeting","T00030":"Audiences targeting"}
  1593. df_report = self.type_trans(df_report, metric, timeZone_, extra_columns=['matchedTarget', 'tactic'])
  1594. conn.insert_df("AmazonReport.SD_targetsMatchedTargetV2", df_report[metric])
  1595. time.sleep(0.05)
  1596. print("插入完成SD_targetsMatchedTargetV2")
  1597. df_rel = df_report[metric]
  1598. return df_rel
  1599. if __name__ == '__main__':
  1600. AWS_CREDENTIALS = {
  1601. 'lwa_client_id': 'amzn1.application-oa2-client.ebd701cd07854fb38c37ee49ec4ba109',
  1602. 'refresh_token': "Atzr|IwEBIL4ur8kbcwRyxVu_srprAAoTYzujnBvA6jU-0SMxkRgOhGjYJSUNGKvw24EQwJa1jG5RM76mQD2P22AKSq8qSD94LddoXGdKDO74eQVYl0RhuqOMFqdrEZpp1p4bIR6_N8VeSJDHr7UCuo8FiabkSHrkq7tsNvRP-yI-bnpQv4EayPBh7YwHVX3hYdRbhxaBvgJENgCuiEPb35Q2-Z6w6ujjiKUAK2VSbCFpENlEfcHNsjDeY7RCvFlwlCoHj1IeiNIaFTE9yXFu3aEWlExe3LzHv6PZyunEi88QJSXKSh56Um0e0eEg05rMv-VBM83cAqc5POmZnTP1vUdZO8fQv3NFLZ-xU6e1WQVxVPi5Cyqk4jYhGf1Y9t98N654y0tVvw74qNIsTrB-8bGS0Uhfe24oBEWmzObvBY3zhtT1d42myGUJv4pMTU6yPoS83zhPKm3LbUDEpBA1hvvc_09jHk7vUEAuFB-UAZzlht2C1yklzQ",
  1603. 'lwa_client_secret': 'cbf0514186db4df91e04a8905f0a91b605eae4201254ced879d8bb90df4b474d',
  1604. 'profile_id': "3006125408623189"
  1605. }
  1606. conn = Common_ETLMethod(**AWS_CREDENTIALS).clickhouse_connect()
  1607. # SD
  1608. ac_etl = SP_ETL(**AWS_CREDENTIALS)
  1609. # ls = ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
  1610. ls = ac_etl.targets_ETL()
  1611. print(ls)
  1612. # ls.to_csv('temp.csv')
  1613. # print(ls)
  1614. # print(ls.info())
  1615. # print(ls.to_excel('obse11.xlsx'))
  1616. # ac_etl.reportV2_campaignsRecord_t2_ETL(conn)
  1617. # ac_etl.reportV2_campaignsRecord_t3_ETL(conn)
  1618. # ac_etl.reportV2_adGroupsRecord_t2_ETL(conn)
  1619. # ac_etl.reportV2_adGroupsRecord_t3_ETL(conn)
  1620. # ac_etl.reportV2_asins_t2_ETL(conn)
  1621. # ac_etl.reportV2_asins_t3_ETL(conn)
  1622. # ac_etl.reportV2_productAds_t2_ETL(conn)
  1623. # ac_etl.reportV2_productAds_t3_ETL(conn)
  1624. # ac_etl.reportV2_targets_t2_ETL(conn)
  1625. # ac_etl.reportV2_productAds_t3_ETL(conn)
  1626. # ac_etl.reportV2_campaign_matchedTarget_t2_ETL(conn)
  1627. # ac_etl.reportV2_campaign_matchedTarget_t3_ETL(conn)
  1628. # ac_etl.reportV2_adGroups_matchedTarget_t2_ETL(conn)
  1629. # ac_etl.reportV2_adGroups_matchedTarget_t3_ETL(conn)
  1630. # ac_etl.reportV2_targets_matchedTarget_t2_ETL(conn)
  1631. # ac_etl.reportV2_targets_matchedTarget_t3_ETL(conn)
  1632. # SB
  1633. # ac_etl = SB_ETL(**AWS_CREDENTIALS)
  1634. # ac_etl.reportV3_purchasedAsinRecord_ETL(conn)
  1635. # ac_etl.reportV2_campaignsRecord_ETL(conn)
  1636. # ac_etl.reportV2_campaignsVideo_ETL(conn)
  1637. # ac_etl.reportV2_adGroupsRecord_ETL(conn)
  1638. # ac_etl.reportV2_adGroupsVideo_ETL(conn)
  1639. # ac_etl.reportV2_adsRecord_ETL(conn)
  1640. # ac_etl.reportV2_adsVideo_ETL(conn)
  1641. # ac_etl.reportV2_keywordsRecord_ETL(conn)
  1642. # ac_etl.reportV2_keywordsVideo_ETL(conn)
  1643. # ac_etl.reportV2_placementRecord_ETL(conn)
  1644. # ac_etl.reportV2_placementVideo_ETL(conn)
  1645. # ac_etl.reportV2_searchtermsRecord_ETL(conn)
  1646. # ac_etl.reportV2_searchtermsVideo_ETL(conn)
  1647. # ac_etl.reportV2_targetsRecord_ETL(conn)
  1648. # ac_etl.reportV2_targetsVideo_ETL(conn)
  1649. # SP
  1650. # ac_etl = SP_ETL(**AWS_CREDENTIALS)
  1651. # ac_etl.reportV3_campaign_spCampaignsETL(conn)
  1652. # ac_etl.reportV3_adGroup_spCampaignsETL(conn)
  1653. # ac_etl.reportV3_campaignPlacement_spCampaignsETL(conn)
  1654. # ac_etl.reportV3_targeting_spTargetingETL(conn)
  1655. # ac_etl.reportV3_searchTerm_spSearchTermETL(conn)
  1656. # ac_etl.reportV3_advertiser_spAdvertisedProductETL(conn)
  1657. # ac_etl.reportV3_asin_spPurchasedProductETL(conn)
  1658. conn.close()
  1659. ###