using variables in use schema/database commands - snowflake-cloud-data-platform

I am trying to place my snowflakes into git repository. Some of the part are environment specific, like
use schema analytics_dev ### I will have to change this while deploying to qa and stuff.
I was thinking if could replace these with variable like this
set env='dev'
use schema analytics+$env
But this an error "SQL compilation error: syntax error line 1 at position 20 unexpected '+'."
How do I achieve this functionality?

Here's a way, to append vars, and use as an identifier:
set env = 'dev';
set analytics_schema = 'analytics' || $env;
use schema identifier($analytics_schema);

A couple of options here:
set (min, max)=(40, 70);
select $min;
And this:
set var_artist_name ='Jackson Browne';
select getvariable('var_artist_name');
and more here:
https://docs.snowflake.com/en/sql-reference/session-variables.html

Related

How do I insert a variable into a string using schemachange?

I'm using schemachange (https://github.com/Snowflake-Labs/schemachange) to manage creating resources in snowflake. I have an initial script that sets up, among other things, a stage. In schemachange, you can use variables with {{ ENV }} (as example). In the case below, I want to provide a url that uses {{ ENV }} as art of the string. i.e.
create stage if not exists test_{{ ENV }}
file_format = (type=json)
copy_options = (match_by_column_name=case_insensitive)
url='s3://test-bucket-{{ ENV }}-xxxxxxx/'
storage_integration = s3_int_{{ DBVERSION }};
The URL line is where I want to reference a bucket name specific to the ENV variable that's being passed in. I'm not sure how to do it in this case, tried just using the above but it doesn't work. Any suggestions? Thanks!
Here's how I did it:
CREATE STAGE IF NOT EXISTS Test
URL = 's3://test-bucket-{{env}}'
In your schemachange command, you need to make sure you include -- vars command:
--vars '{"env":"MyEnvironment"}'
We have this running thru Azure DevOps pipelines and works great so far.

Janusgraph how to deal with the global_offline misconfiguration

when i tired to remove an index, I typed wrong GLOBAL_OFFLINE setting in userConfig in the ManagementSystem, which I mistake typed the "index.search.backend" with a directory string ......
when i try to open this janusgraph, the print out as below :
WARN org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration
Local setting index.search.backend=lucene (Type: GLOBAL_OFFLINE) is overridden by globally managed value (/data/lucene). Use the ManagementSystem interface instead of the local configuration to control this setting.
INFO org.janusgraph.diskstorage.Backend - Configuring index [search]
Could not find implementation class: /data/lucene
I wonder whether i could not drop this table at the backend and fix this problem !
many thx !
I think i have fix this problem !
I just use the KCVS backend , and find out the source code of GraphDatabaseConfiguration ;
I tried and get the KCVSConfig use the code following :
PropertiesConfiguration configuration = new PropertiesConfiguration(GRAPH_PROPERTIES);
ReadConfiguration localConfig = new CommonsConfiguration(configuration);
BasicConfiguration localBasicConfiguration = new BasicConfiguration(ROOT_NS,localConfig, BasicConfiguration.Restriction.NONE);
KeyColumnValueStoreManager storeManager = Backend.getStorageManager(localBasicConfiguration);
KCVSConfiguration KCVSConfig =Backend.getStandaloneGlobalConfiguration(storeManager,localBasicConfiguration);
Just using the KCVSConfiguration to remove all the index configuration !

In drupal7, how can i use varibles when exporting configuration using features and strongarm modules?

I am working on a drupal7 site.
In Dev, I have enabled and configured simplesamlphp_auth module.
I used features and strongarm to export the configuration to code.
The downloaded feature contain:
myfeature_sso.features.defaultconfig.inc
myfeature_sso.info
myfeature_sso.module
The .inc file contains the configuration values I had put in (admin/config/people/simplesamlphp_auth) correctly
Now, in a few places, I want to replace the hard coded values with variables that change based on the environment. I set the variables at the top of .inc file using variable_get $office_ou = variable_get('office_ou', NULL); ...and . A quick example is $base_url below:
$strongarm = new stdClass();
$strongarm->disabled = FALSE;
$strongarm->api_version = 1;
$strongarm->name = 'simplesamlphp_auth_logoutgotourl';
$strongarm->value = $base_url ;
$export['simplesamlphp_auth_logoutgotourl'] = $strongarm;
When I DPM these variables, they display correct values.
But on a fresh install when I enable myfeature_sso module the value of variables are missing.
missing value from $base_url variable
Can you please point me in the right direction?
Thank you.
I found the answer:
when in features ui, do not add fields relevant to simplesamle to the defaultconfig section. if you have any there remove them.
add fields relevant to simplesaml to storongarm section
export the feature
in your_feature_name.strongarm.inc add any additional php code to function your_feature_name_strongarm()
done

Nlog set Database target programatically and access custom log message properties

I need to support database logging.
For that I decided to use nlog because it brings database support.
But first of all I need to setup the configuration programatically.
As far as I understood it I have to set the layout for the target.
But the class "DatabaseTarget" does not have any property related to Layout :/.
var dbTarget = new DatabaseTarget();
dbTarget.ConnectionString = LogConnectionString;
dbTarget.CommandType = System.Data.CommandType.StoredProcedure;
dbTarget.CommandText = "exec dbo.InsertLog #level=${level}, #callSite=${callsite}, #message=${message}, #stackTrace=${stacktrace}, #machinename=${machinename}, #processname=${processname}";
Is the layout definition really necessary for the DatabaseTarget. If so how do I set it programatically?
Additionally I want to pass some information. But I am not sure how I can assign those informations for the procedure.
As far as I understood it I can assign those variables:
https://github.com/nlog/nlog/wiki/Layout-Renderers
But NLog support generic arguments with his Log Method. It looks like this:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), logEntry.Message, logEntry.Fault);
How can I assign the passed "logEntry.Fault" value for my stored procedure?
Best regards
Your current log-statement injects logEntry.Fault as parameter into string.Format(logEntry.Message, logEntry.Fault):
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), logEntry.Message, logEntry.Fault);
If you are using NLog 4.5 then you can use structured-logging where you can name the parameter like this:
_nLog.Log<AJourFaultLevel>(ConvertLogLevel(logEntry.Level), "Fault occurred: {AJourFaultLevel}", logEntry.Fault);
Then you can access the named parameter using ${event-properties:item=}:
dbTarget.CommandText = "exec dbo.InsertLog #level=${level}, #callSite=${callsite}, #message=${message}, #stackTrace=${stacktrace}, #machinename=${machinename}, #processname=${processname}, #faultLevel=${event-properties:item=AJourFaultLevel}";

Play Scala: How to access multiple databases with anorm and Magic[T]

I want to access two databases in Play Scala with anorm and Magic[T], (one is H2 and another is PostgreSQL). I just don't know how to config it...
I noticed that we can set another database connection in conf/application.conf
db_other.url=jdbc:mysql://localhost/test
db_other.driver=com.mysql.jdbc.Driver
db_other.user=root
db_other.pass=
However, how can I use it with Magic?
(I read the source code of Magic but don't understand it... my am a freshman of Scala)
Anyhow, if multiple database access is impossible with Magic[T] , I wish to do it with anorm, then how can I config it?
var sqlQuery = SQL( //I guess some config params should be set here, but how?
"""
select * from Country
"""
)
In play.api.db.DB it appears you can pass in a string of the name you defined in application.conf.
Then use one of the methods specified here: http://www.playframework.org/documentation/2.0/ScalaDatabase
# play.api.db.DB.class
def withConnection[A](name : scala.Predef.String)(block : scala.Function1[java.sql.Connection, A])(implicit app : play.api.Application) : A = { /* compiled code */ }

Resources