ビネットが来て、それまでは、ユーザーで提示された講演をチェックしてください! 2018年の会議:
データベースに接続できるようにするには、接続パラメーターをYAMLファイルで指定する必要があります。たとえば、TEMPファイルで作成されるSQLiteデータベースなどです。
sqlite :
drv : !expr RSQLite::SQLite()
dbname : !expr tempfile()
デフォルトでは、 dbr
現在の作業ディレクトリにdb_config.yaml
という名前のファイルを探します。これは、 dbr.db_config_path
グローバルオプションを介してオーバーライドできます。
options( dbr.db_config_path = system.file( ' example_db_config.yaml ' , package = ' dbr ' ))
DEMO YAMLファイルのより複雑な例は、RSTUDIOがホストするデータベースへのMySQL接続を説明しています(パブリックユーザー名とパスワードを使用):
shinydemo :
drv : !expr RMySQL::MySQL()
host : shiny-demo.csa7qlmguqrf.us-east-1.rds.amazonaws.com
username : guest
password : guest
dbname : shinydemo
単純な文字列の代わりに、KMS暗号化されたパスワード、その他の秘密、パラメーターも指定することもできます。
redshift :
host : !aws_kms |
KMSencryptedciphertext...
port : 5439
dbname : dbname
user : username
drv : !expr RPostgreSQL::PostgreSQL()
password : !aws_kms |
KMSencryptedciphertext...
s3_copy_bucket : !attr |-
's3://openmail-model/temp'
s3_copy_iam_role : !attr |-
arn:aws:iam::accountid:role/redshift_role
接続パラメーターが構成ファイルからロードされたら、SQLクエリの作成は、SQLステートメントと接続の名前を指定するのと同じくらい簡単です。
db_query( ' show tables ' , ' shinydemo ' )
# > INFO [2019-01-06 01:06:18] Connecting to shinydemo
# > INFO [2019-01-06 01:06:19] Executing:**********
# > INFO [2019-01-06 01:06:19] show tables
# > INFO [2019-01-06 01:06:19] ********************
# > INFO [2019-01-06 01:06:19] Finished in 0.1336 secs returning 3 rows
# > INFO [2019-01-06 01:06:19] Closing connection to shinydemo
# > Tables_in_shinydemo
# > 1 City
# > 2 Country
# > 3 CountryLanguage
より高度な使用法については、キャッシュデータベース接続など、 ?db_connect
と上記のビネットを確認してください。
SQLチャンクを再利用するには、 example_sql_chunks.yaml
のバンドルされた例設定のように、構造化されたYAMLファイルにSQLクエリ(またはその一部)をリストすることができます
sql_chunk_files
を使用して、現在使用されているSQLテンプレートYAMLファイルをリストまたは更新します。
sql_chunk_files(system.file( ' example_sql_chunks.yaml ' , package = ' dbr ' ))
次に、その定義の任意のキーを、ドットで区切られた階層のキーで構成される文字列で参照することができます。したがって、以下の定義( example_sql_chunks.yaml
の一部)を見ることができます。
dbr :
shinydemo :
countries :
count : SELECT COUNT(*) FROM Country
dbr
のshinydemo
セクションのcountries
アイテムからcount
キーを取得すると、次のようなことができます。
sql_chunk( ' dbr.shinydemo.countries.count ' )
# > SELECT COUNT(*) FROM Country
すぐにdb_query
に渡します:
countries <- db_query(sql_chunk( ' dbr.shinydemo.countries.count ' ), ' shinydemo ' )
# > INFO [2019-01-06 01:33:33] Connecting to shinydemo
# > INFO [2019-01-06 01:33:34] Executing:**********
# > INFO [2019-01-06 01:33:34] SELECT COUNT(*) FROM Country
# > INFO [2019-01-06 01:33:34] ********************
# > INFO [2019-01-06 01:33:34] Finished in 0.1291 secs returning 1 rows
# > INFO [2019-01-06 01:33:34] Closing connection to shinydemo
SQLチャンクは、 sql
ファイル拡張機能を備えたYAMLの外側のファイルでも定義でき、YAMLファイルにタグ!include
と参照できます。
dbr :
shinydemo :
countries :
europe : !include europe.sql
これにより、 europe.sql
のコンテンツが読み取られ、 sql_chunk('dbr.shinydemo.countries.count')
として利用可能になります。
ファイルに加えて、 sql
ファイルを含むフォルダーも含めることができます。その場合、ベースファイル名( sql
ファイル拡張子なし)が指定されたキーの下でキーになります。たとえば、このYAML定義を考えてみましょう。
cities : !include cities.sql
cities.sql
フォルダーからすべてのファイルをロードし、 europe
で利用できるようにするため、次のように中級のYAMLが作成されます。
cities: !include cities.sql
europe: |-
SELECT Name
FROM City
WHERE CountryCode IN (
{sql_chunk('dbr.shinydemo.countries.europe', indent_after_linebreak = 2)})
europe_large: |-
SELECT Name
FROM City
WHERE
Population > 1000000 AND
Name IN (
{sql_chunk('dbr.shinydemo.cities.europe', indent_after_linebreak = 4)}))
ディレクトリのキーの~!
!include
、その後、キーは親ノードで利用可能になりますので、例えば
cities:
~!: !include cities.sql
実際にはcities
キーを作成するのではなく、ルートノードのeurope
とeurope_large
キーのみを作成します。
上記からわかるように、このテンプレートアプローチの主な力は、ヨーロッパ諸国のリストについて、SQLチャンクを簡単に再利用できることです。
cities <- db_query(sql_chunk( ' dbr.shinydemo.cities.europe ' ), ' shinydemo ' )
# > INFO [2019-01-06 01:32:02] Connecting to shinydemo
# > INFO [2019-01-06 01:32:02] Executing:**********
# > INFO [2019-01-06 01:32:02] SELECT Name
# > FROM City
# > WHERE CountryCode IN (
# > SELECT Code
# > FROM Country
# > WHERE Continent = 'Europe')
# > INFO [2019-01-06 01:32:02] ********************
# > INFO [2019-01-06 01:32:02] Finished in 0.1225 secs returning 643 rows
# > INFO [2019-01-06 01:32:02] Closing connection to shinydemo
dbr.shinydemo.countries.europe
キーで、 Country
に関連するサブクエリが指定された場合:
SELECT Name
FROM City
WHERE CountryCode IN (
{sql_chunk( ' dbr.shinydemo.countries.europe ' , indent_after_linebreak = 2 )})
indent_after_linebreak
パラメーターは、 FROM
の化粧品の更新のみが、SQLステートメントの同じ文字からWHERE
に並べられるようにします。
さらに複雑 /ネストされた例:
sql_chunk( ' dbr.shinydemo.cities.europe_large ' )
# > SELECT Name
# > FROM City
# > WHERE
# > Population > 1000000 AND
# > Name IN (
# > SELECT Name
# > FROM City
# > WHERE CountryCode IN (
# > SELECT Code
# > FROM Country
# > WHERE Continent = 'Europe')))