Spaces:
Sleeping
Sleeping
File size: 2,209 Bytes
b474ae1 06f01b3 b474ae1 5b4c268 f146007 5b4c268 f146007 b474ae1 5b4c268 b474ae1 f146007 b474ae1 f146007 5b4c268 06f01b3 b474ae1 f146007 06f01b3 b474ae1 f146007 b474ae1 f146007 b474ae1 f146007 8cb3a33 f146007 b474ae1 f146007 b474ae1 5b4c268 06f01b3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import json
import gradio as gr
import duckdb
# Load the Parquet dataset path
dataset_path = 'sample_contract_df.parquet' # Update with your Parquet file path
# Load the dataset schema with DuckDB
def load_dataset_schema():
con = duckdb.connect()
con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
schema = con.execute("DESCRIBE contract_data").fetchdf()
con.close()
return schema.to_dict(orient="records")
# Generate SQL based on schema and user query
def generate_sql_query(features, query):
# This simple example constructs an SQL condition directly, adapt for complex queries if needed
sql_query = f"SELECT * FROM contract_data WHERE {query}"
return sql_query
# Execute the SQL query and display results
def execute_query(sql_query):
con = duckdb.connect()
con.execute(f"CREATE VIEW contract_data AS SELECT * FROM '{dataset_path}'")
result_df = con.execute(sql_query).fetchdf()
con.close()
return result_df.to_markdown() # Display result as markdown
# Gradio app UI
with gr.Blocks() as demo:
gr.Markdown("""
# Local Parquet SQL Query App
Query and explore data in `sample_contract_df.parquet` using DuckDB and SQL queries.
""")
# Load dataset schema and convert it to JSON for display
schema = load_dataset_schema()
schema_json = json.dumps(schema, indent=2)
features = gr.Code(label="Dataset Schema", value=schema_json, language="json")
# User input components
query = gr.Textbox(label="Natural Language Query", placeholder="Enter a condition, e.g., 'amount > 1000'")
sql_out = gr.Code(label="Generated SQL Query", language="sql")
results_out = gr.Markdown(label="Query Results")
# Buttons to generate and execute SQL
btn_generate = gr.Button("Generate SQL")
btn_execute = gr.Button("Execute Query")
# Set up click events with correct inputs and outputs
btn_generate.click(
fn=generate_sql_query,
inputs=[features, query], # Both are Gradio components now
outputs=sql_out,
)
btn_execute.click(
fn=execute_query,
inputs=sql_out,
outputs=results_out,
)
# Launch the app
demo.launch()
|