Files
llmware-ai--llmware/solutions/sources/loading_csv_into_custom_table-2a.py
wehub-resource-sync 86db9aae8e
Documentation / build (push) Has been cancelled
Documentation / deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:34:55 +08:00

73 lines
2.6 KiB
Python

""" This example shows how to quickly build a CustomTable using a 'pseudo-DB' CSV file. A 'pseudo-DB' is a CSV
organized in a set of rows with a common column structure. Below we will show a few tools to analyze and
validate the CSV upfront to assess if there are areas that need remediation before attempting to safely load
into a database.
CustomTable is designed to work with the text collection databases supported by LLMWare:
SQL DBs --- Postgres and SQLIte
NoSQL DB --- Mongo DB
Even though Mongo does not require a schema for inserting and retrieving information, the CustomTable method
will expect a defined schema to be provided (good best practice, in any case). """
from llmware.resources import CustomTable
def building_custom_table_from_csv():
# point fp and fn at the file_path of the CSV file
fp = "/path/to/your/csv_file"
# good example in examples folder - customer_table.csv
fn = "sample_file.csv"
# first analyze the csv and confirm that the rows and columns are consistently being extracted
analysis = CustomTable().validate_csv(fp,fn,delimiter=',',encoding='utf-8-sig')
print("\nAnalysis of the CSV file")
for key, value in analysis.items():
print(f"analysis: {key} - {value}")
table_name = "sample_table_100"
# use "postgres" | "mongo" | "sqlite"
db_name = "postgres"
ct = CustomTable(db=db_name,table_name=table_name)
# load the csv, which will identify the schema and data types, and package as 'rows' ready for db insertion
# -- this method will NOT create the DB table or insert any rows - that happens in the next step
# -- if there is a 'header_row', then it will not be inserted in the DB (so row count may differ by 1
output = ct.load_csv(fp,fn)
print("\nLoad CSV output")
for key, value in output.items():
print(f"output: {key} - {value}")
# spot-check the rows that have been created before inserting into database as a final check
print("\nSpot-Check Rows Before Inserting into DB Table")
sample_size = min(len(ct.rows), 10)
for x in range(0,sample_size):
print("rows: ", x, ct.rows[x])
# when ready, uncomment, and insert the rows into the DB
ct.insert_rows()
# basic query
# e.g., if using customer_table included in example folder - "customer_name", "Martha Williams"
customer = ct.lookup("key", "lookup_value")
print("\nLookup from DB")
print(f"customer_record: ", customer)
ct.delete_table(confirm=True)
return 0
if __name__ == "__main__":
building_custom_table_from_csv()