[2021.05.17~20] 인턴 +77 최종본 jdbc_plugin multi_table loop in Python (CSV변환 및 editplus 꿀팁 포함)
회사에 다니게 되면, 하나의 스키마(데이터베이스)로 정의되어 있는 곳에 수 많은 table 값들이 저장되어있다.
* 예를들면 food_database(스키마)에 136개의 tables 값이 저장된 상태
-> 그러면, 하나하나 select * from tables1, select * from tables2 ~~~ select * from tables136 까지 할 수는 없다.
-> 이 수 많은 반복 작업을 하지 않기 위해, 파이썬으로 코드를 작성하였다.
-> 1. 해당 데이터베이스의 테이블을 드래그 하여 컨트롤 + C 로 복사한다.
-> 2. Editplus 연다
-> 3. 컨트롤 + H 눌러서 (찾을 말: |) , (바꿀 말: 공백) -> 모두 바꿈 클릭
-> 4. 컨트롤 + A 누른상태에서, 줄 앞 공백제거만 한다.(★★★★★ 절때로 줄 끝 공백 제거X ★★★★★)
-> 5. 컨트롤 + A 누르면 앞에 공백이 제거 됐다.
-> 6. 이제, 알트 + C 를 눌러 세로로 행을 추가 할 것이다.(개꿀팁임)
-> ★★★★★ 앞에 " 를 추가 하고 뒤에, "를 추가한다.(추가된 모습) ★★★★★
-> ★ 7. 이상태로 전체 복사 붙여 넣기 한 후에, jupyter notebook에 삽입 후, 맨 앞에 [ , 맨 뒤에] 를 추가해준다. ★
-----------------------------------------------------------------------------------------------------------------------
<소스코드>
db_tables = ["access_token ",
"activity ",
"address ",
"answer_abuse_reason ",
"answer_report_abuse ",
"attribute ",
"attribute_group ",
"banner ",
"banner_group ",
"banner_image ",
"banner_image_description ",
"blog ",
"blog_related ",
"category ",
"category_commission ",
"category_description ",
"category_path ",
"contact ",
"country ",
"coupon ",
"coupon_product_category ",
"coupon_usage ",
"coupon_usage_product ",
"currency ",
"customer ",
"customer_activity ",
"customer_cart ",
"customer_document ",
"customer_group ",
"customer_ip ",
"customer_transaction ",
"customer_wishlist ",
"delivery_allocation ",
"delivery_location ",
"delivery_location_to_location ",
"delivery_person ",
"delivery_person_to_location ",
"delivery_status ",
"email_template ",
"geo_zone ",
"jobs ",
"language ",
"login_log ",
"manufacturer ",
"migrations ",
"order ",
"order_cancel_reason ",
"order_history ",
"order_log ",
"order_product ",
"order_product_log ",
"order_status ",
"order_total ",
"page ",
"page_group ",
"payment ",
"payment_archive ",
"payment_items ",
"payment_items_archive ",
"paypal_order ",
"paypal_order_transaction ",
"permission_module ",
"permission_module_group ",
"plugins ",
"price_update_file_log ",
"product ",
"product_answer ",
"product_answer_like_dislike ",
"product_attribute ",
"product_description ",
"product_discount ",
"product_image ",
"product_price_log ",
"product_question ",
"product_rating ",
"product_related ",
"product_special ",
"product_stock_alert ",
"product_tag ",
"product_tire_price ",
"product_to_category ",
"product_varient ",
"product_varient_option ",
"product_varient_option_details ",
"product_varient_option_image ",
"product_view_log ",
"quotation ",
"razorpay_order ",
"razorpay_order_transaction ",
"service ",
"service_category ",
"service_category_path ",
"service_enquiry ",
"service_image ",
"service_to_category ",
"sessions ",
"settings ",
"settlement ",
"settlement_item ",
"site_filter ",
"site_filter_category ",
"site_filter_section ",
"site_filter_section_item ",
"sku ",
"stock_log ",
"stock_status ",
"stripe_order ",
"stripe_order_transaction ",
"tax ",
"trend ",
"trend_image ",
"trend_recommend ",
"user_group ",
"users ",
"varients ",
"varients_value ",
"vendor ",
"vendor_category ",
"vendor_coupon ",
"vendor_coupon_product_category ",
"vendor_global_setting ",
"vendor_invoice ",
"vendor_invoice_item ",
"vendor_order_archive ",
"vendor_order_archive_log ",
"vendor_order_products ",
"vendor_order_status ",
"vendor_orders ",
"vendor_orders_log ",
"vendor_payment ",
"vendor_payment_archive ",
"vendor_product ",
"widget ",
"widget_item ",
"zone ",
"zone_to_geo_zone "]
# db table -> for문을 통해, 양옆 공백 제거
arr = []
for i in db_tables:
arr.append(i.strip())
#print(arr)
print("input {")
# jdbc -> plugin db table 복사 완료.
for i in range(0,len(arr)):
print(" jdbc {")
#print(" clean_run => true")
print(" jdbc_driver_library => \"/usr/share/java/mysql-connector-java-8.0.23.jar\"")
print(" jdbc_driver_class => \"com.mysql.jdbc.Driver\"")
print(" jdbc_connection_string => \"jdbc:mysql://localhost:3306/db_name?useSSL=false&user=root&password=1234\"")
print(" jdbc_user => \"root\"")
print(" jdbc_password => \"1234\"")
print(" schedule => \"* * * * *\"")
print(f" statement => \"select * from {arr[i]}\"")
print(f" type => \"{arr[i]}\"")
print(f" tracking_column => \"table_{i+1}\"") # 이 컬럼은 use_column_Value랑 한쌍이며, 해당 테이블의 필드를 찾는 것인데, 일일이 할 수 없으므로 대충 지어줌
print(" use_column_value => true")
print(" }")
print("\n")
print("}")
print("output {")
# for 문 if 조건
for i in range(0,len(arr)):
print(f" if[type] == \"{arr[i]}\"" " {")
print(" elasticsearch {")
print(" hosts => \"localhost:9200\"")
print(" index => \"index_name\"")
print(" }")
print(" }")
print(" stdout {")
print(" codec => rubydebug")
print(" }")
print("}")
---------------------------------------------------------------------------------------------------------------------
<출력 화면>
-> jdbc_plugin을 136개나 만들었다. (복사해서 .conf 파일에 붙여 쓰면 됨)
---------------------------------------------------------------------------------------------------------
+@ 해당 database table를 CSV로 변환 할 필요는 없지만, 변환하였다.
CSV 소스코드
# db 데이터베이스를 복붙 후 공백 기준으로 "찍고, 오른쪽은 ",
# 그런 다음에, 맨 앞뒤에 []로 list로 해줌
import csv,sys,time
# ★★★ 현재 시간 데이터로 파일이름을 저장 ★★★
timestr = time.strftime("%Y%m%d_%H%M%S")
#print(timestr)
# CSV 파일 저장
f = open("C:\/python_file\/"+timestr+"dbtablename.csv",'w',encoding='utf-8-sig',newline="")
wr = csv.writer(f)
db_tables = ["access_token ",
"activity ",
"address ",
"answer_abuse_reason ",
"answer_report_abuse ",
"attribute ",
"attribute_group ",
"banner ",
"banner_group ",
"banner_image ",
"banner_image_description ",
"blog ",
"blog_related ",
"category ",
"category_commission ",
"category_description ",
"category_path ",
"contact ",
"country ",
"coupon ",
"coupon_product_category ",
"coupon_usage ",
"coupon_usage_product ",
"currency ",
"customer ",
"customer_activity ",
"customer_cart ",
"customer_document ",
"customer_group ",
"customer_ip ",
"customer_transaction ",
"customer_wishlist ",
"delivery_allocation ",
"delivery_location ",
"delivery_location_to_location ",
"delivery_person ",
"delivery_person_to_location ",
"delivery_status ",
"email_template ",
"geo_zone ",
"jobs ",
"language ",
"login_log ",
"manufacturer ",
"migrations ",
"order ",
"order_cancel_reason ",
"order_history ",
"order_log ",
"order_product ",
"order_product_log ",
"order_status ",
"order_total ",
"page ",
"page_group ",
"payment ",
"payment_archive ",
"payment_items ",
"payment_items_archive ",
"paypal_order ",
"paypal_order_transaction ",
"permission_module ",
"permission_module_group ",
"plugins ",
"price_update_file_log ",
"product ",
"product_answer ",
"product_answer_like_dislike ",
"product_attribute ",
"product_description ",
"product_discount ",
"product_image ",
"product_price_log ",
"product_question ",
"product_rating ",
"product_related ",
"product_special ",
"product_stock_alert ",
"product_tag ",
"product_tire_price ",
"product_to_category ",
"product_varient ",
"product_varient_option ",
"product_varient_option_details ",
"product_varient_option_image ",
"product_view_log ",
"quotation ",
"razorpay_order ",
"razorpay_order_transaction ",
"service ",
"service_category ",
"service_category_path ",
"service_enquiry ",
"service_image ",
"service_to_category ",
"sessions ",
"settings ",
"settlement ",
"settlement_item ",
"site_filter ",
"site_filter_category ",
"site_filter_section ",
"site_filter_section_item ",
"sku ",
"stock_log ",
"stock_status ",
"stripe_order ",
"stripe_order_transaction ",
"tax ",
"trend ",
"trend_image ",
"trend_recommend ",
"user_group ",
"users ",
"varients ",
"varients_value ",
"vendor ",
"vendor_category ",
"vendor_coupon ",
"vendor_coupon_product_category ",
"vendor_global_setting ",
"vendor_invoice ",
"vendor_invoice_item ",
"vendor_order_archive ",
"vendor_order_archive_log ",
"vendor_order_products ",
"vendor_order_status ",
"vendor_orders ",
"vendor_orders_log ",
"vendor_payment ",
"vendor_payment_archive ",
"vendor_product ",
"widget ",
"widget_item ",
"zone ",
"zone_to_geo_zone "]
tables = []
for i in db_tables:
tables.append(f"select * from {i}".strip()) # 앞뒤로 공백 제거
#print(tables)
# database _ table들을 CSV로 저장함. --> 구지 CSV로 저장할 필요는 없음
wr.writerow(tables)
f.close()
# jdbc -> plugin db table 복사 완료.
for i in range(0,len(tables)):
print(" jdbc {")
print(" clean_run => true")
print(" jdbc_driver_library => \"/usr/share/java/mysql-connector-java-8.0.23.jar\"")
print(" jdbc_driver_class => \"com.mysql.jdbc.Driver\"")
print(" jdbc_connection_string => \"jdbc:mysql:AWSlink:3306/데이터베이스이름(스키마명)?useSSL=false&user=아이디&password=비번\"")
print(" jdbc_user => \"아이디\"")
print(" jdbc_password => \"비밀번호\"")
print(" schedule => \"* * * * *\"")
print(f" statement => \"{tables[i]}\"")
print(" tracking_column => \"regdate\"")
print(" use_column_value => true")
print(" }")
print("\n")
* 이 코드는 위의 final_05_20을 참고하여, 수정할 것 (0517 버전임)
<출력결과>
'Data > ELK' 카테고리의 다른 글
[2021.05.25] 인턴 +85 elasticsearch Query DSL search in index(aggregation,복합쿼리 등) (0) | 2021.05.25 |
---|---|
[2021.05.20] 인턴 +80 Tag Cloud(WordCloud) 시각화 방법 (0) | 2021.05.20 |
[2021.05.14] 인턴 +74 AWS Linux(Ubuntu:20.04) ELK 설치 및 실행방법 (0) | 2021.05.14 |
[2021.05.06] 인턴 +66 Query DSL을 통해 원하는 필드 값만 추출 하는 방법 (0) | 2021.05.06 |
[2021.05.04] 인턴 +64 Elasticsearch Query DSL 개념 및 사용법 (0) | 2021.05.04 |
댓글