Skip to content
Max Franks edited this page Jul 21, 2018 · 3 revisions

CREATE VIEW

CREATE CountMinSketch VIEW channel.trends
    FROM LOG news.subsilent:posts p
        WHERE p.url STARTSWITH "twitter"
    WITH OPTIONS {
        replication_factor: 3
        size: 30
};

USE synapse.lighting;

// Types
CREATE TYPE Voltage WITH deviceid uuid, voltage float64;
CREATE TYPE MonthlyAverageVoltage WITH month int, year int, average float64;

// Voltage Log
CREATE LOG voltages USING TYPE Voltage CLUSTERED BY deviceid;

CREATE AGGREGATE MonthlyAverage() AS monthly.voltages
    FROM voltages v
    USING TYPE MonthlyAverageVoltage;

SELECT FROM monthly.voltages v WHERE v.deviceid = '123098120398102983';

Functional views need to be able to resume work from a checkpoint. They also need to emit values in order to save state.

USE

USE synapse.lighting;

db.use('synapse.lighting')

SHOW

SHOW lists various system details based on user credentials. The information show is for the current namespace;

SHOW NAMESPACES;
SHOW LOGS;
SHOW VIEWS;
SHOW USERS;
SHOW ROLES;

DESCRIBE

DESCRIBE TYPE Location;
DESCRIBE LOG <name>;
DESCRIBE VIEW <name>;
DESCRIBE ROLE <role>;
DESCRIBE USER <username>;

var Location = db.types('Location') Location.desc();

CREATE ROLE

CREATE ROLE guest FOR NAMESPACE synapse.*;

db.roles.create('synapse.lighting', 'guest');

REMOVE ROLE

REMOVE ROLE guest FOR NAMESPACE synapse.*;

db.roles.remove('synapse.lighting', 'guest');

ADD PERMISSION

ADD PERMISSIONS insert.log, create.log, drop.log TO ROLE guest ON NAMESPACE synapse.*;
ADD ALL PERMISSIONS TO ROLE guest ON NAMESPACE acme.crates;

var permissions = ['insert.log', 'create.log', 'drop.log']; var ns = namespaces('lighting'); db.roles('guest').addPermissions(permissions);

db.use('synapse.lighting'); db.roles('guest').removePermission('log.drop');

REMOVE PERMISSION

REMOVE PERMISSION log.drop FROM ROLE guest ON NAMESPACE synapse.*;

ADD USER

ADD USER max.franks TO NAMESPACE synapse.lighting WITH ROLE guest;

REMOVE USER

REMOVE USER max.franks;
REMOVE USER max.franks FROM NAMESPACE acme;

SET <> FOR USER <> TO <>;

SET PASSWORD FOR USER max.franks TO "synapse";

ADD PUBLIC KEY

ADD PUBLIC KEY "..." FOR USER max.franks;

REMOVE PUBLIC KEY

REMOVE PUBLIC KEY "..." FOR USER max.franks;

ADD ROLE

ADD ROLE guest FOR USER max.franks ON NAMESPACE synapse.*;

REMOVE ROLE

REMOVE ROLE guest FOR USER max.franks ON NAMESPACE synapse.*;

ADD API SECRET

ADD API SECRET <hex> FOR ROLE news;

REMOVE API SECRET

REMOVE API SECRET <hex> FOR ROLE news;

Permission List

Permissions are applied to a scope. For instance, a namespace and a log or view.

insert.logs
select.logs
create.logs
drop.logs
show.logs

add.users
remove.users
update.users
grant.users
assign.users
show.users

create.roles
delete.roles
update.roles
show.roles

create.views
drop.views
select.views
update.views
show.views

create.namespaces
show.namespaces
drop.namespaces
use.namespaces

GENERATE TOKEN

GENERATE TOKEN FOR ROLE news USING SALT '...';

Request Header

Authentication: K <salt>:<role>:<public-hash>;

SUBSCRIBE

SUBSCRIBE TO subsilent.news:channels.trending
    WHERE channel = 'Volcanoes' LIMIT 30;

SUBSCRIBE TO {...}
    FROM subsilent.news:channels.trending
    WHERE channel = 'Volcanoes';

UNSUBSCRIBE

UNSUBSCRIBE TO LOG subsilent.news:channels.trending;