Questions on External types


I have a couple of general about using external types:

  1. What databases are external types supported for? The virtualization article says:

The C3 IoT Platform enables data virtualization on external databases. For the 7.8 release, C3 IoT provides database connectors for Oracle, PostgreSQL, Microsoft SQL Server, SAP Hana, Cassandra, and AWS Dynamo DB. Note that SqlSourceSystem support is available for Oracle, PostgreSQL, Microsoft SQL Server, and SAP Hana.

Does that mean external types are only supported for Oracle, PostgreSQL, Microsoft SQL Server, and SAP Hana?

  1. What performance impacts, if any are there associated with using external types?
  2. What are some specific use cases for using an external type? Is it strictly something that is useful if a customer absolutely can’t be replicating their data to a C3 environment?
  3. How much is functionality limited/unavailable when using External types? For instance if I wanted to have a stored calc on an external type, or a separate type that has a foreign key field on an external type, would this be possible to do?
  4. How do permissions work with respect to external types? I would guess it’s not possible to create a column on an external type table, but what sort of read/write/delete permissions do you have? Is it based off the permissions of the user account being used for the SqlSourceSystem?
  5. In the training there is an example in which the account password for a SqlSourceSystem is hardcoded as a field on that type instance in seed data:
    "datastore": "postgres",

Is there a way in which you can use c3Vault or something else so that you don’t have to store a password in plaintext?


About credential you can do like this

     "datastore": "hana",
     "username": "SYSTEM"


var sourceSystem = SqlSourceSystem.get("DBTest");
sourceSystem.setSecretValue("password", "*******");

Then you cannot define stored cal on external type since those persist the data - you can define calc fields.


How do I know what users can read the password later by doing?


Do I need to create an authorization specifically for this?


You can know which users can do ANY action with: Authorizer.actionPermissions(“type”, “method”)


@marcosordi I’m not really sure I understood your original comment about stored calcs. Did Riley answer what you needed to know?