Using Oracle R Enterprise, you can create R proxy objects in your R session from database-resident data as described in the following topics.
To gain access to the data in the database tables in the schema, you use the ore.sync
function.
When you invoke ore.connect
in an R session, Oracle R Enterprise creates a connection to a schema in an Oracle Database instance. The ore.sync
function creates an ore.frame
object that is a proxy for a table in a schema. You can use the ore.attach
function to add an R environment that represents a schema in the R search path.
When you use the ore.sync
function to create an ore.frame
object as a proxy for a database table, the name of the ore.frame
proxy object is the same as the name of the database object. Each ore.frame
proxy object contains metadata about the corresponding database object.
You can use the proxy ore.frame
object to select data from the table. When you execute an R operation that selects data from the table, the operation returns the current data from the database object. However, if some application has added a column to the table, or has otherwise changed the metadata of the database object, the ore.frame
proxy object does not reflect such a change until you again invoke ore.sync
for the database object.
If you invoke the ore.sync
function with no tables specified, and if the value of the all
argument was FALSE
in the ore.connect
function call that established the connection to the Oracle database instance, then the ore.sync
function creates a proxy object for each table in the schema specified by ore.connect
. You can use the table
argument to specify the tables for which you want to create ore.frame
proxy objects.
Tip:
To conserve memory resources and save time, you should only add proxies for the tables that you want to use in your R session.
With the schema
argument, you can specify the schema for which you want to create an R environment and proxy objects. Only one environment for a given database schema can exist at a time. With the use.keys
argument, you can specify whether you want to use primary keys in the table to order the ore.frame
object.
Tip:
Ordering is expensive in the database. Because most operations in R do not need ordering, you should generally set use.keys
to FALSE
unless you need ordering for sampling data or some other purpose.
With the query
argument, you can specify a SQL SELECT
statement. This enables you to create an ore.frame
for a query without creating a view in the database. This can be useful when you not have the CREATE VIEW
system privilege for the current schema. You cannot use the schema
argument and the query
argument in the same ore.sync
invocation.
You can use the ore.ls
function to list the ore.frame
proxy objects that correspond to database tables in the environment for a schema. You can use the ore.exists
function to find out if an ore.frame
proxy object for a database table exists in an R environment. The function returns TRUE
if the proxy object exists or FALSE
if it does not. You can remove an ore.frame
proxy object from an R environment with the ore.rm
function.
The following example demonstrates the use of the ore.sync
function.
The example first invokes the ore.exec
function to create some tables to represent tables existing in the database schema for the rquser. The example then invokes ore.sync
and specifies three tables of the schema. The ore.sync
invocation creates an R environment for the rquser schema and creates proxy ore.frame
objects for the specified tables in that schema. The example lists the ore.frame
proxy objects in the current environment. The TABLE3 table exists in the schema but does not have an ore.frame
proxy object because it was not included in the ore.sync
invocation.
The example next invokes ore.sync
with the query
argument to create ore.frame
objects for the specified SQL queries. The example lists the ore.frame
objects again.
The example then invokes ore.sync
again and creates an R environment for the SH schema and proxy objects in that environment for the specified tables in that schema. The example invokes the ore.exists
function to find out if the specified table exists in the current environment and then in the SH environment. The example lists the R objects in the SH environment.
The example next removes the ore.frame
objects QUERY1
, QUERY2
, and TABLE4
from the rquser environment. Finally, the example lists the proxy objects in the environment again.
Note:
The ore.rm
function invocation removes the ore.frame
that is a proxy for the TABLE4 table from the environment. It does not delete the table from the schema.
Example 2-10 Using ore.sync to Add ore.frame Proxy Objects to an R Environment
# After connecting to a database as rquser, create some tables. ore.exec("CREATE TABLE TABLE1 AS SELECT * FROM dual") ore.exec("CREATE TABLE TABLE2 AS SELECT * FROM dual") ore.exec("CREATE TABLE TABLE3 AS SELECT * FROM dual") ore.exec("CREATE TABLE TABLE4 AS SELECT * FROM dual") # Create ore.frame objects for the specified tables. ore.sync(table = c("TABLE1", "TABLE3", "TABLE4")) # List the ore.frame proxy objects in the current environment. ore.ls() # Create ore.frame objects for the specified queries. ore.sync(query = c("QUERY1" = "SELECT 0 X, 1 Y FROM dual", "QUERY2" = "SELECT 1 X, 0 Y FROM dual")) ore.ls() # The rquser user has been granted SELECT permission on the tables in the # SH schema. ore.sync("SH", table = c("CUSTOMERS", "SALES")) # Find out if the CUSTOMERS ore.frame exists in the rquser environment. ore.exists("CUSTOMERS") # Find out if it exists in the SH environment. ore.exists("CUSTOMERS", schema = "SH") # List the ore.frame proxy objects in the SH environment. ore.ls("SH") # Remove the ore.frame objects for the specified objects. ore.rm(c("QUERY1", "QUERY2", "TABLE4")) # List the ore.frame proxy objects in the current environment again. ore.ls()Listing for This Example
R> # After connecting to a database as rquser, create some tables. R> ore.exec("CREATE TABLE TABLE1 AS SELECT * FROM dual") R> ore.exec("CREATE TABLE TABLE2 AS SELECT * FROM dual") R> ore.exec("CREATE TABLE TABLE3 AS SELECT * FROM dual") R> ore.exec("CREATE TABLE TABLE4 AS SELECT * FROM dual") R> # Create ore.frame objects for the specified tables. R> ore.sync(table = c("TABLE1", "TABLE3", "TABLE4")) R> # List the ore.frame proxy objects in the current environment. R> ore.ls() [1] "TABLE1" "TABLE3" "TABLE4" R> # Create ore.frame objects for the specified queries. R> ore.sync(query = c("QUERY1" = "SELECT 0 X, 1 Y FROM dual", + "QUERY2" = "SELECT 1 X, 0 Y FROM dual")) R> ore.ls() [1] "QUERY1" "QUERY2" "TABLE1" "TABLE3" "TABLE4" R> # The rquser user has been granted SELECT permission on the tables in the R> # SH schema. R> ore.sync("SH", table = c("CUSTOMERS", "SALES")) R> # Find out if the CUSTOMERS ore.frame exists in the rquser environment. R> ore.exists("CUSTOMERS") [1] FALSE R> # Find out if it exists in the SH environment. R> ore.exists("CUSTOMERS", schema = "SH") [1] TRUE R> # List the ore.frame proxy objects in the SH environment. R> ore.ls("SH") [1] "CUSTOMERS" "SALES" R> # Remove the ore.frame objects for the specified objects. R> ore.rm(c("QUERY1", "QUERY2", "TABLE4")) R> # List the ore.frame proxy objects in the current environment again. R> ore.ls() [1] "TABLE1" TABLE3"
After you have created an R environment and ore.frame
proxy objects with ore.sync
, you can get a proxy object by name with the ore.get
function. You can use ore.get
to get the proxy ore.frame
for a table and assign it to a variable in R, as in SH_CUST <- ore.get(name = "CUSTOMERS", schema = "SH")
. The ore.frame
exists in the R global environment, which can be referred to using .GlobalEnv
, and so it appears in the list returned by the ls
function. Also, because this object exists in the R global environment, as opposed an R environment that represents a database schema, it is not listed by the ore.ls
function.
Example 2-11 Using ore.get to Get a Database Table
This example invokes the ore.sync
function to create an ore.frame
object that is a proxy for the CUSTOMERS table in the SH schema. The example then gets the dimensions of the proxy object.
ore.sync(schema = "SH", table = "CUSTOMERS", use.keys = FALSE) dim(ore.get(name = "CUSTOMERS", schema = "SH"))Listing for Example 2-11
R> ore.sync(schema = "SH", table = "CUSTOMERS", use.keys = FALSE) R> dim(ore.get(name = "CUSTOMERS", schema = "SH")) [1] 630 15
With ore.attach
, you add an R environment for a database schema to the R search path. When you add the R environment, you have access to database tables by name through the proxy objects created by the ore.sync
function without needing to specify the schema environment.
The default schema is the one specified in creating the connection and the default position in the search path is 2. You can specify the schema and the position in the ore.attach function invocation.. You can also specify whether you want the ore.attach
function to indicate whether a naming conflict occurs when adding the environment. You can detach the environment for a schema from the R search path with the ore.detach
function.
Example 2-12 Using ore.attach to Add an Environment for a Database Schema
This example demonstrates the use of the ore.attach
function. Comments in the example explain the function invocations.
# Connected as rquser. # Add the environment for the rquser schema to the R search path. ore.attach() # Create an unordered ore.frame proxy object in the SH environment for the # specifed table. ore.sync(schema = "SH", table = "CUSTOMERS", use.keys = FALSE) # Add the environment for the SH schema to the search path and warn if naming # conflicts exist. ore.attach("SH", 3, warn.conflicts = TRUE) # Display the number of rows and columns in the proxy object for the table. dim(CUSTOMERS) # Remove the environment for the SH schema from the search path. ore.detach("SH") # Invoke the dim function again. dim(CUSTOMERS)Listing for Example 2-12
R> # Connected as rquser. R> # Add the environment for the rquser schema to the R search path. R> ore.attach() R> # Create an unordered ore.frame proxy object in the SH environment for the R> # specifed table. R> ore.sync(schema = "SH", table = "CUSTOMERS", use.keys = FALSE) R> # Add the environment for the SH schema to the search path and warn if naming R> # conflicts exist. R> ore.attach("SH", 3, warn.conflicts = TRUE) R> # Display the number of rows and columns in the proxy object for the table. R> dim(CUSTOMERS) [1] 630 15 R> # Remove the environment for the SH schema from the search path. R> ore.detach("SH") R> # Invoke the dim function again. R> dim(CUSTOMERS) Error: object 'CUSTOMERS' not found