본문 바로가기
Data/ELK

[2021.05.17~20] 인턴 +77 최종본 jdbc_plugin multi_table loop in Python (CSV변환 및 editplus 꿀팁 포함)

by injekim97 2021. 5. 17.
반응형

[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("}")

0520inal_db_jdbc loop .ipynb
0.13MB

---------------------------------------------------------------------------------------------------------------------

<출력 화면>

-> 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 버전임)

 

 

<출력결과>

 

multi_table_jdbc_plugin_loop (CSV변환).ipynb
0.11MB

 

반응형

댓글