| Title: | Interface to 'kuzu' Graph Database |
|---|---|
| Description: | Provides a high-performance 'R' interface to the 'kuzu' graph database. It uses the 'reticulate' package to wrap the official 'Python' client ('kuzu'), allowing users to interact with 'kuzu' seamlessly from within 'R'. Key features include managing database connections, executing 'Cypher' queries, and efficiently loading data from 'R' data frames. It also provides seamless integration with the 'R' ecosystem by converting query results directly into popular 'R' data structures, including 'tibble', 'igraph', 'tidygraph', and 'g6R' objects, making 'kuzu's powerful graph computation capabilities readily available for data analysis and visualization workflows in 'R'. The 'kuzu' documentation can be found at <https://kuzudb.github.io/docs/>. |
| Authors: | Manuel Wick-Eckl [aut, cre] |
| Maintainer: | Manuel Wick-Eckl <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.2.4 |
| Built: | 2026-05-17 09:01:10 UTC |
| Source: | https://github.com/wickm/kuzur |
Converts a Kuzu query result into an igraph graph object.
as_igraph(query_result)as_igraph(query_result)
query_result |
A |
This function takes a kuzu_query_result object and extracts nodes and edges
directly from the query results, then constructs an igraph object. It is
the final step in the kuzu_execute -> as_igraph workflow.
An igraph object.
if (requireNamespace("igraph", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Person(name STRING, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE REL TABLE Knows(FROM Person TO Person)") kuzu_execute(conn, "CREATE (p:Person {name: 'Alice'}), (q:Person {name: 'Bob'})") kuzu_execute(conn, "MATCH (a:Person), (b:Person) WHERE a.name='Alice' AND b.name='Bob' CREATE (a)-[:Knows]->(b)" ) res <- kuzu_execute(conn, "MATCH (p:Person)-[k:Knows]->(q:Person) RETURN p, k, q") g <- as_igraph(res) print(g) rm(conn, res, g) }if (requireNamespace("igraph", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Person(name STRING, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE REL TABLE Knows(FROM Person TO Person)") kuzu_execute(conn, "CREATE (p:Person {name: 'Alice'}), (q:Person {name: 'Bob'})") kuzu_execute(conn, "MATCH (a:Person), (b:Person) WHERE a.name='Alice' AND b.name='Bob' CREATE (a)-[:Knows]->(b)" ) res <- kuzu_execute(conn, "MATCH (p:Person)-[k:Knows]->(q:Person) RETURN p, k, q") g <- as_igraph(res) print(g) rm(conn, res, g) }
Provides an S3 method to convert a Kuzu query result object into a
tibble. This requires the tibble package to be installed.
## S3 method for class 'kuzu.query_result.QueryResult' as_tibble(x, ...)## S3 method for class 'kuzu.query_result.QueryResult' as_tibble(x, ...)
x |
A Kuzu query result object. |
... |
Additional arguments passed to |
A tibble containing the query results.
if (requireNamespace("tibble", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") # Convert the result to a tibble tbl <- tibble::as_tibble(result) print(tbl) }if (requireNamespace("tibble", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") # Convert the result to a tibble tbl <- tibble::as_tibble(result) print(tbl) }
Converts a Kuzu query result into a tidygraph tbl_graph object.
as_tidygraph(query_result)as_tidygraph(query_result)
query_result |
A |
A tbl_graph object.
if (requireNamespace("tidygraph", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Person(name STRING, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (p:Person {name: 'Alice'})") res <- kuzu_execute(conn, "MATCH (p:Person) RETURN p") g_tidy <- as_tidygraph(res) print(g_tidy) rm(conn, res, g_tidy) }if (requireNamespace("tidygraph", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Person(name STRING, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (p:Person {name: 'Alice'})") res <- kuzu_execute(conn, "MATCH (p:Person) RETURN p") g_tidy <- as_tidygraph(res) print(g_tidy) rm(conn, res, g_tidy) }
Provides an S3 method to seamlessly convert a Kuzu query result object into a
standard R data.frame.
## S3 method for class 'kuzu.query_result.QueryResult' as.data.frame(x, ...)## S3 method for class 'kuzu.query_result.QueryResult' as.data.frame(x, ...)
x |
A Kuzu query result object. |
... |
Additional arguments passed to |
An R data.frame containing the query results.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") # Convert the result to a data.frame df <- as.data.frame(result) print(df)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") # Convert the result to a data.frame df <- as.data.frame(result) print(df)
This function checks if the required Python package (kuzu) is available
in the user's reticulate environment. If the package is missing, it
provides a clear, actionable message guiding the user on how to install
it manually.
check_kuzu_installation()check_kuzu_installation()
NULL invisibly. The function is called for its side effect of
checking dependencies and printing messages.
check_kuzu_installation()check_kuzu_installation()
Establishes a connection to a Kuzu database. If the database does not exist at the specified path, it will be created. This function combines the database initialization and connection steps into a single call.
kuzu_connection(path)kuzu_connection(path)
path |
A string specifying the file path for the database. For an
in-memory database, use |
A Python object representing the connection to the Kuzu database.
# Create an in-memory database and connection conn <- kuzu_connection(":memory:") # Create or connect to an on-disk database temp_db_dir <- file.path(tempdir(), "kuzu_disk_example_db") db_path <- file.path(temp_db_dir, "kuzu_db") dir.create(temp_db_dir, recursive = TRUE, showWarnings = FALSE) # Establish connection conn_disk <- kuzu_connection(db_path) # Ensure the database is shut down and removed on exit on.exit({ # Access the 'db' object from the reticulate main module main <- reticulate::import_main() if (!is.null(main$db)) { main$db$shutdown() } unlink(temp_db_dir, recursive = TRUE) })# Create an in-memory database and connection conn <- kuzu_connection(":memory:") # Create or connect to an on-disk database temp_db_dir <- file.path(tempdir(), "kuzu_disk_example_db") db_path <- file.path(temp_db_dir, "kuzu_db") dir.create(temp_db_dir, recursive = TRUE, showWarnings = FALSE) # Establish connection conn_disk <- kuzu_connection(db_path) # Ensure the database is shut down and removed on exit on.exit({ # Access the 'db' object from the reticulate main module main <- reticulate::import_main() if (!is.null(main$db)) { main$db$shutdown() } unlink(temp_db_dir, recursive = TRUE) })
Loads data from a CSV file into a specified table in the Kuzu database.
kuzu_copy_from_csv(conn, file_path, table_name, optional_csv_parameter = NULL)kuzu_copy_from_csv(conn, file_path, table_name, optional_csv_parameter = NULL)
conn |
A Kuzu connection object. |
file_path |
A string specifying the path to the CSV file. |
table_name |
A string specifying the name of the destination table in Kuzu. |
optional_csv_parameter |
An optional parameter for CSV-specific configurations (e.g., delimiter, header). Refer to Kuzu documentation for available options. |
This function is called for its side effect of loading data and does not return a value.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE City(name STRING, population INT64, PRIMARY KEY (name))") # Create a temporary CSV file csv_file <- tempfile(fileext = ".csv") write.csv(data.frame(name = c("Berlin", "London"), population = c(3645000, 8982000)), csv_file, row.names = FALSE) # Load data from CSV kuzu_copy_from_csv(conn, csv_file, "City") # Verify the data result <- kuzu_execute(conn, "MATCH (c:City) RETURN c.name, c.population") print(as.data.frame(result)) # Clean up the temporary file unlink(csv_file)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE City(name STRING, population INT64, PRIMARY KEY (name))") # Create a temporary CSV file csv_file <- tempfile(fileext = ".csv") write.csv(data.frame(name = c("Berlin", "London"), population = c(3645000, 8982000)), csv_file, row.names = FALSE) # Load data from CSV kuzu_copy_from_csv(conn, csv_file, "City") # Verify the data result <- kuzu_execute(conn, "MATCH (c:City) RETURN c.name, c.population") print(as.data.frame(result)) # Clean up the temporary file unlink(csv_file)
Efficiently copies data from an R data.frame or tibble into a specified
table in the Kuzu database.
kuzu_copy_from_df(conn, df, table_name)kuzu_copy_from_df(conn, df, table_name)
conn |
A Kuzu connection object. |
df |
A |
table_name |
A string specifying the name of the destination table in Kuzu. |
When loading into a relationship table, Kuzu assumes the first two columns in the file are: FROM Node Column: The primary key of the FROM nodes. TO Node Column: The primary key of the TO nodes.
This function is called for its side effect of loading data and does not return a value.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE REL TABLE Knows(FROM User TO User)") # Load from a data.frame users_df <- data.frame(name = c("Carol", "Dan"), age = c(35, 40)) kuzu_copy_from_df(conn, users_df, "User") # Load from a tibble (requires pre-existing nodes) kuzu_execute(conn, "CREATE (u:User {name: 'Alice'}), (v:User {name: 'Bob'})") knows_df <- data.frame(from_person = c("Alice", "Bob"), to_person = c("Bob", "Carol")) kuzu_copy_from_df(conn, knows_df, "Knows") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") print(as.data.frame(result)) result_rel <- kuzu_execute(conn, "MATCH (a:User)-[k:Knows]->(b:User) RETURN a.name, b.name") print(as.data.frame(result_rel))conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE REL TABLE Knows(FROM User TO User)") # Load from a data.frame users_df <- data.frame(name = c("Carol", "Dan"), age = c(35, 40)) kuzu_copy_from_df(conn, users_df, "User") # Load from a tibble (requires pre-existing nodes) kuzu_execute(conn, "CREATE (u:User {name: 'Alice'}), (v:User {name: 'Bob'})") knows_df <- data.frame(from_person = c("Alice", "Bob"), to_person = c("Bob", "Carol")) kuzu_copy_from_df(conn, knows_df, "Knows") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") print(as.data.frame(result)) result_rel <- kuzu_execute(conn, "MATCH (a:User)-[k:Knows]->(b:User) RETURN a.name, b.name") print(as.data.frame(result_rel))
Loads data from a JSON file into a specified table in the Kuzu database. This function also ensures the JSON extension is loaded and available.
kuzu_copy_from_json(conn, file_path, table_name)kuzu_copy_from_json(conn, file_path, table_name)
conn |
A Kuzu connection object. |
file_path |
A string specifying the path to the JSON file. |
table_name |
A string specifying the name of the destination table in Kuzu. |
This function is called for its side effect of loading data and does not return a value.
Kuzu JSON Import, Kuzu JSON Extension
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Product(id INT64, name STRING, PRIMARY KEY (id))") # Create a temporary JSON file json_file <- tempfile(fileext = ".json") json_data <- '[{"id": 1, "name": "Laptop"}, {"id": 2, "name": "Mouse"}]' writeLines(json_data, json_file) # Load data from JSON kuzu_copy_from_json(conn, json_file, "Product") # Verify the data result <- kuzu_execute(conn, "MATCH (p:Product) RETURN p.id, p.name") print(as.data.frame(result)) # Clean up the temporary file unlink(json_file)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Product(id INT64, name STRING, PRIMARY KEY (id))") # Create a temporary JSON file json_file <- tempfile(fileext = ".json") json_data <- '[{"id": 1, "name": "Laptop"}, {"id": 2, "name": "Mouse"}]' writeLines(json_data, json_file) # Load data from JSON kuzu_copy_from_json(conn, json_file, "Product") # Verify the data result <- kuzu_execute(conn, "MATCH (p:Product) RETURN p.id, p.name") print(as.data.frame(result)) # Clean up the temporary file unlink(json_file)
Loads data from a Parquet file into a specified table in the Kuzu database.
kuzu_copy_from_parquet(conn, file_path, table_name)kuzu_copy_from_parquet(conn, file_path, table_name)
conn |
A Kuzu connection object. |
file_path |
A string specifying the path to the Parquet file. |
table_name |
A string specifying the name of the destination table in Kuzu. |
This function is called for its side effect of loading data and does not return a value.
if (requireNamespace("arrow", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Country(name STRING, code STRING, PRIMARY KEY (name))") # Create a temporary Parquet file parquet_file <- tempfile(fileext = ".parquet") country_df <- data.frame(name = c("USA", "Canada"), code = c("US", "CA")) arrow::write_parquet(country_df, parquet_file) # Load data from Parquet kuzu_copy_from_parquet(conn, parquet_file, "Country") # Verify the data result <- kuzu_execute(conn, "MATCH (c:Country) RETURN c.name, c.code") print(as.data.frame(result)) # Clean up the temporary file unlink(parquet_file) }if (requireNamespace("arrow", quietly = TRUE)) { conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE Country(name STRING, code STRING, PRIMARY KEY (name))") # Create a temporary Parquet file parquet_file <- tempfile(fileext = ".parquet") country_df <- data.frame(name = c("USA", "Canada"), code = c("US", "CA")) arrow::write_parquet(country_df, parquet_file) # Load data from Parquet kuzu_copy_from_parquet(conn, parquet_file, "Country") # Verify the data result <- kuzu_execute(conn, "MATCH (c:Country) RETURN c.name, c.code") print(as.data.frame(result)) # Clean up the temporary file unlink(parquet_file) }
Infers a schema from an R data.frame or tibble and creates a corresponding
NODE table in the Kuzu database.
kuzu_create_table_from_df(conn, df, table_name, primary_key)kuzu_create_table_from_df(conn, df, table_name, primary_key)
conn |
A Kuzu connection object. |
df |
A |
table_name |
A string specifying the name of the new table in Kuzu. |
primary_key |
An optional string specifying the column to be used as the primary key. If not provided, no primary key will be set. |
This function is called for its side effect of creating a table and does not return a value.
conn <- kuzu_connection(":memory:") my_df <- data.frame( name = c("Alice", "Bob"), age = c(25L, 30L), height = c(1.75, 1.80), is_student = c(TRUE, FALSE), birth_date = as.Date(c("1999-01-01", "1994-05-15")) ) kuzu_create_table_from_df(conn, my_df, "Person", primary_key = "name") # Now you can load data into the created table kuzu_copy_from_df(conn, my_df, "Person") result <- kuzu_execute(conn, "MATCH (p:Person) RETURN *") print(as.data.frame(result))conn <- kuzu_connection(":memory:") my_df <- data.frame( name = c("Alice", "Bob"), age = c(25L, 30L), height = c(1.75, 1.80), is_student = c(TRUE, FALSE), birth_date = as.Date(c("1999-01-01", "1994-05-15")) ) kuzu_create_table_from_df(conn, my_df, "Person", primary_key = "name") # Now you can load data into the created table kuzu_copy_from_df(conn, my_df, "Person") result <- kuzu_execute(conn, "MATCH (p:Person) RETURN *") print(as.data.frame(result))
Submits a Cypher query to the Kuzu database for execution. This function is used for all database operations, including schema definition (DDL), data manipulation (DML), and querying (MATCH).
kuzu_execute(conn, query)kuzu_execute(conn, query)
conn |
A Kuzu connection object, as returned by |
query |
A string containing the Cypher query to be executed. |
A Python object representing the query result.
conn <- kuzu_connection(":memory:") # Create a node table kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") # Insert data kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") # Query data result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age")conn <- kuzu_connection(":memory:") # Create a node table kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") # Insert data kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") # Query data result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age")
Fetches all rows from a Kuzu query result and returns them as a list of lists.
kuzu_get_all(result)kuzu_get_all(result)
result |
A Kuzu query result object. |
A list where each element is a list representing a row of results.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") all_results <- kuzu_get_all(result)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") all_results <- kuzu_get_all(result)
Retrieves the data types of the columns in a Kuzu query result.
kuzu_get_column_data_types(result)kuzu_get_column_data_types(result)
result |
A Kuzu query result object. |
A character vector of column data types.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") kuzu_get_column_data_types(result)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") kuzu_get_column_data_types(result)
Retrieves the names of the columns in a Kuzu query result.
kuzu_get_column_names(result)kuzu_get_column_names(result)
result |
A Kuzu query result object. |
A character vector of column names.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") kuzu_get_column_names(result)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") kuzu_get_column_names(result)
Fetches the first n rows from a Kuzu query result.
kuzu_get_n(result, n)kuzu_get_n(result, n)
result |
A Kuzu query result object. |
n |
The number of rows to retrieve. |
A list of the first n rows.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") kuzu_execute(conn, "CREATE (:User {name: 'Bob', age: 30})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") first_row <- kuzu_get_n(result, 1)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") kuzu_execute(conn, "CREATE (:User {name: 'Bob', age: 30})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") first_row <- kuzu_get_n(result, 1)
Fetches the next available row from a Kuzu query result. This function can be called repeatedly to iterate through results one by one.
kuzu_get_next(result)kuzu_get_next(result)
result |
A Kuzu query result object. |
A list representing the next row, or NULL if no more rows are
available.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") kuzu_execute(conn, "CREATE (:User {name: 'Bob', age: 30})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") row1 <- kuzu_get_next(result) row2 <- kuzu_get_next(result)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") kuzu_execute(conn, "CREATE (:User {name: 'Bob', age: 30})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") row1 <- kuzu_get_next(result) row2 <- kuzu_get_next(result)
Retrieves the schema (column names and data types) of a Kuzu query result.
kuzu_get_schema(result)kuzu_get_schema(result)
result |
A Kuzu query result object. |
A named list where names are column names and values are data types.
conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") kuzu_get_schema(result)conn <- kuzu_connection(":memory:") kuzu_execute(conn, "CREATE NODE TABLE User(name STRING, age INT64, PRIMARY KEY (name))") kuzu_execute(conn, "CREATE (:User {name: 'Alice', age: 25})") result <- kuzu_execute(conn, "MATCH (a:User) RETURN a.name, a.age") kuzu_get_schema(result)
This function is intended for merging data from an R data.frame into Kuzu
using a specified merge query. It leverages Python's reticulate to interact
with Kuzu's Python API.
kuzu_merge_df(conn, df, merge_query)kuzu_merge_df(conn, df, merge_query)
conn |
A Kuzu connection object. |
df |
A |
merge_query |
A string representing the Kuzu query for merging data. |
This function is called for its side effect of merging data and does not return a value.
## Not run: my_data <- data.frame( name = c("Alice", "Bob"), item = c("Book", "Pen"), current_city = c("New York", "London") ) merge_statement <- "MERGE (p:Person {name: df.name}) MERGE (i:Item {name: df.item}) MERGE (p)-[:PURCHASED]->(i) ON MATCH SET p.current_city = df.current_city ON CREATE SET p.current_city = df.current_city" # Note: 'conn' would need to be a valid Kuzu connection object # and the schema (Person, Item, PURCHASED tables) would need to be created # before running this example. # kuzu_merge_df(conn, my_data, merge_statement) # Example with a different merge query structure: my_data_2 <- data.frame( person_name = c("Charlie"), purchased_item = c("Laptop"), city = c("Paris") ) # merge_statement_2 <- "MERGE (p:Person {name: person_name}) MERGE (i:Item {name: purchased_item}) MERGE (p)-[:PURCHASED]->(i) ON MATCH SET p.current_city = city ON CREATE SET p.current_city = city" # kuzu_merge_df(conn, my_data_2, merge_statement_2) ## End(Not run)## Not run: my_data <- data.frame( name = c("Alice", "Bob"), item = c("Book", "Pen"), current_city = c("New York", "London") ) merge_statement <- "MERGE (p:Person {name: df.name}) MERGE (i:Item {name: df.item}) MERGE (p)-[:PURCHASED]->(i) ON MATCH SET p.current_city = df.current_city ON CREATE SET p.current_city = df.current_city" # Note: 'conn' would need to be a valid Kuzu connection object # and the schema (Person, Item, PURCHASED tables) would need to be created # before running this example. # kuzu_merge_df(conn, my_data, merge_statement) # Example with a different merge query structure: my_data_2 <- data.frame( person_name = c("Charlie"), purchased_item = c("Laptop"), city = c("Paris") ) # merge_statement_2 <- "MERGE (p:Person {name: person_name}) MERGE (i:Item {name: purchased_item}) MERGE (p)-[:PURCHASED]->(i) ON MATCH SET p.current_city = city ON CREATE SET p.current_city = city" # kuzu_merge_df(conn, my_data_2, merge_statement_2) ## End(Not run)