Documentation
¶
Index ¶
- Variables
- func ColumnIsNumberOrDate(log logger.Logger, fnGetColumns GetColumnsFuncT, mapper Mapper, ...) (retval int, err error)
- func ConvertTableDefinitionToSnowflake(log logger.Logger, tabCols TableColumns, snowSchemaTable rdbms.SchemaTable, ...) (snowflakeTableDefinition string, err error)
- func GetTableColumns(log logger.Logger, fnGetColumns GetColumnsFuncT, ...) ([]string, error)
- func TabDefinitionToChan(log logger.Logger, name string, conn *shared.ConnectionDetails, ...) (chan stream.Record, shared.Connector)
- type DeltaType
- type GetColumnsFuncT
- type Mapper
- type TableColumn
- type TableColumns
Constants ¶
This section is empty.
Variables ¶
var MockDataTypeMapping = []dataTypeLink{ {SourceDataType: "date", TargetDataType: "timestamp_tz", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "number", TargetDataType: "number", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, }
var NetezzaToSnowflakeDataTypeMapping = []dataTypeLink{ {SourceDataType: "bigint", TargetDataType: "bigint", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "boolean", TargetDataType: "boolean", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "bpchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "byteint", TargetDataType: "integer", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "char", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "character", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "character varying", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "date", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "decimal", TargetDataType: "string", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "double", TargetDataType: "float", SanitiserFunc: sanitiseDouble, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "double precision", TargetDataType: "float", SanitiserFunc: sanitiseDouble, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "float", TargetDataType: "float", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "integer", TargetDataType: "integer", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "interval", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval day", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval day to hour", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval day to minute", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval day to second", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval hour", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval hour to minute", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval hour to second", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval minute", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval minute to second", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval month", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval second", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval year", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "interval year to month", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "json", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "jsonb", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "jsonpath", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "nchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "national character", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "national character varying", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "numeric", TargetDataType: "string", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "nvarchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "real", TargetDataType: "real", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "smallint", TargetDataType: "smallint", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "st_geometry", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "time", TargetDataType: "time", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "timestamp", TargetDataType: "timestamp", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "timetz", TargetDataType: "time", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "time with time zone", TargetDataType: "time", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "varbinary", TargetDataType: "binary", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "binary varying", TargetDataType: "binary", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "varchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, }
var OracleToSnowflakeDataTypeMapping = []dataTypeLink{ {SourceDataType: "date", TargetDataType: "timestamp_tz", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp(3)", TargetDataType: "timestamp_tz(3)", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp(6)", TargetDataType: "timestamp_tz(6)", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp(9)", TargetDataType: "timestamp_tz(9)", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "varchar2", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "number", TargetDataType: "number", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "char", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, }
OracleToSnowflakeDataTypeMapping contains a mapping of Oracle to Snowflake data types. TODO: handle different cases Oracle DATE/TIMESTAMP to Snowflake time zone mapping. if we use "datetime" then Snowflake stores data without a time zone component, where it reports it as UTC! if we use "timestamp_tz" then data is stored with an offset but without the actual time zone so date arithmetic gets confusing e.g. if you add 6 months and end in up daylight savings time then that's not reflected correctly. we can use "timestamp_ltz" but Golang seems to report values as 1h less than they should be despite the UI showing correctly.
var SnowflakeToSnowflakeDataTypeMapping = []dataTypeLink{ {SourceDataType: "array", TargetDataType: "array", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "bigint", TargetDataType: "bigint", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "binary", TargetDataType: "binary", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "boolean", TargetDataType: "boolean", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "char", TargetDataType: "char", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "character", TargetDataType: "character", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "date", TargetDataType: "date", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "datetime", TargetDataType: "datetime", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "decimal", TargetDataType: "decimal", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "double", TargetDataType: "double", SanitiserFunc: sanitiseDouble, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "double precision", TargetDataType: "double precision", SanitiserFunc: sanitiseDouble, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "float", TargetDataType: "float", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "float4", TargetDataType: "float4", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "float8", TargetDataType: "float8", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "geography", TargetDataType: "geography", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "int", TargetDataType: "int", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "integer", TargetDataType: "integer", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "number", TargetDataType: "number", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "numeric", TargetDataType: "numeric", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "object", TargetDataType: "object", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "real", TargetDataType: "real", SanitiserFunc: sanitiseReal, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "smallint", TargetDataType: "smallint", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "string", TargetDataType: "string", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "text", TargetDataType: "text", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeText}, {SourceDataType: "time", TargetDataType: "time", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp", TargetDataType: "timestamp", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp_ltz", TargetDataType: "timestamp_ltz", SanitiserFunc: sanitiseTinyInt, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp_ntz", TargetDataType: "timestamp_ntz", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "timestamp_tz", TargetDataType: "timestamp_tz", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "varbinary", TargetDataType: "varbinary", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "varchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "variant", TargetDataType: "variant", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, }
var SqlServerToSnowflakeDataTypeMapping = []dataTypeLink{ {SourceDataType: "bigint", TargetDataType: "bigint", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "boolean", TargetDataType: "boolean", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "bit", TargetDataType: "boolean", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "char", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "date", TargetDataType: "timestamp_tz", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "datetime", TargetDataType: "datetime", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "datetime2", TargetDataType: "datetime", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "datetimeoffset", TargetDataType: "timestamp_tz", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "decimal", TargetDataType: "number", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "double precision", TargetDataType: "float", SanitiserFunc: sanitiseDouble, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "float", TargetDataType: "float", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "guid", TargetDataType: "binary", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "int", TargetDataType: "integer", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "integer", TargetDataType: "integer", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "image", TargetDataType: "binary", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "money", TargetDataType: "number", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "numeric", TargetDataType: "number", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "ntext", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "nchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "nvarchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "real", TargetDataType: "float", SanitiserFunc: sanitiseReal, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "smallint", TargetDataType: "smallint", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "smalldatetime", TargetDataType: "datetime", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "smallmoney", TargetDataType: "number", SanitiserFunc: sanitisePrecisionScale, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "time", TargetDataType: "time", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "text", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, {SourceDataType: "tinyint", TargetDataType: "number", SanitiserFunc: sanitiseTinyInt, DeltaDataType: DeltaTypeNumber}, {SourceDataType: "utcdatetime", TargetDataType: "datetime", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "utctime", TargetDataType: "time", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeDateTime}, {SourceDataType: "uniqueidentifier", TargetDataType: "binary", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "varbinary", TargetDataType: "binary", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeUnclassified}, {SourceDataType: "varchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "varwchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "wchar", TargetDataType: "varchar", SanitiserFunc: sanitiseDataLen, DeltaDataType: DeltaTypeText}, {SourceDataType: "xml", TargetDataType: "varchar", SanitiserFunc: sanitiseBlank, DeltaDataType: DeltaTypeText}, }
SqlServerToSnowflakeDataTypeMapping contains a mapping of SQL Server to Snowflake data types.
Functions ¶
func ColumnIsNumberOrDate ¶
func ColumnIsNumberOrDate(log logger.Logger, fnGetColumns GetColumnsFuncT, mapper Mapper, schemaTable *rdbms.SchemaTable, columnName string) (retval int, err error)
ColumnIsNumberOrDate returns: 0 if the column is a NUMBER field. 1 if the column is a DATE or TIMESTAMP based field.
func ConvertTableDefinitionToSnowflake ¶
func ConvertTableDefinitionToSnowflake(log logger.Logger, tabCols TableColumns, snowSchemaTable rdbms.SchemaTable, mapper Mapper) (snowflakeTableDefinition string, err error)
ConvertTableDefinitionToSnowflake converts each rec in TableColumns to snowflake equivalent and returns a string that is the snowflake CREATE TABLE statement. KNOWN ISSUES: 1) not distinguishing between Oracle BYTE/CHAR semantics.
func GetTableColumns ¶
func GetTableColumns(log logger.Logger, fnGetColumns GetColumnsFuncT, schemaTable *rdbms.SchemaTable) ([]string, error)
GetTableColumns fetches the set of columns that comprise a given [SCHEMA.]TABLE and returns them in a []string. Each column is quoted.
func TabDefinitionToChan ¶
func TabDefinitionToChan( log logger.Logger, name string, conn *shared.ConnectionDetails, tabDefnConf mapTabDefinitionConfigT, schemaTable string, stepWatcher *stats.StepWatcher, waiter components.ComponentWaiter, ) (chan stream.Record, shared.Connector)
TabDefinitionToChan will fetch column names and data types onto the returned channel of stream.Record where schemaTable is of the form [OWNER.]TABLE_NAME by connecting to the given database conn. Parameter 'name' is just the name of this component for logging purposes.
Types ¶
type DeltaType ¶
type DeltaType uint32
DeltaType is used to flag each column as being suitable for DATE or NUMBER based arithmetic. This helps determine the type of transform required to make cp delta actions work.
type GetColumnsFuncT ¶
type GetColumnsFuncT func(log logger.Logger, schemaTable string) (chan stream.Record, shared.Connector)
func GetColumnsFunc ¶
func GetColumnsFunc(conn *shared.ConnectionDetails) GetColumnsFuncT
type Mapper ¶
type Mapper interface {
Map(inputDataType string) (output string)
Sanitise(inputDataType string, dataLen, precision, scale int) (output string)
GetDeltaDataType(inputDataType string) DeltaType
}
Mapper Map takes and input and returns it's equivalent output.
func MustGetMapper ¶
func MustGetMapper(conn *shared.ConnectionDetails) Mapper
MustGetMapper gets the Mapper from tabDefinitionConfig using the supplied conn.Type as the key.
func NewMockDataTypeMapper ¶
func NewMockDataTypeMapper() Mapper
NewMockDataTypeMapper returns an instance of dataTypeMap{}
func NewNetezzaToSnowflakeDataTypeMapper ¶
func NewNetezzaToSnowflakeDataTypeMapper() Mapper
NewNetezzaToSnowflakeDataTypeMapper returns an instance of dataTypeMap{} which implements interface Mapper.
func NewOracleToSnowflakeDataTypeMapper ¶
func NewOracleToSnowflakeDataTypeMapper() Mapper
NewOracleToSnowflakeDataTypeMapper returns an instance of dataTypeMap{} which implements interface Mapper.
func NewSnowflakeDataTypeMapper ¶
func NewSnowflakeDataTypeMapper() Mapper
NewSnowflakeDataTypeMapper returns an instance of dataTypeMap{} which implements interface Mapper. This is only really used to label the DeltaDataType of Snowflake columns.
func NewSqlServerToSnowflakeDataTypeMapper ¶
func NewSqlServerToSnowflakeDataTypeMapper() Mapper
NewSqlServerToSnowflakeDataTypeMapper returns an instance of dataTypeMap{} which implements interface Mapper.
type TableColumn ¶
type TableColumn struct {
ColName string
DataType string
DataLen int
DataPrecision int
DataScale int
Nullable bool
ColID int
}
TableColumn defines a single table column.
type TableColumns ¶
type TableColumns struct {
Owner string
TableName string
Columns []TableColumn
}
TableColumns is a struct representing columns that you would find in one row of Oracle ALL_TAB_COLUMNS view or equivalent other RDBMS type.
func GetTableDefinition ¶
func GetTableDefinition(log logger.Logger, fnGetColumns GetColumnsFuncT, srcSchemaTable *rdbms.SchemaTable) (tabCols TableColumns, err error)
GetTableDefinition connects to the supplied database and fetches the Snowflake table definition for the supplied [<schema>.]<table> combination. Schema is optional; table is not.