raster
This module contains procedures to access and operate with raster tables in Snowflake: rasters loaded using Raster Loader, imported with CARTO, or written in the RaQuet v0.5.0 format.
RASTER_VALUES and RASTER_AGG_VALUES read all of them and return the values as stored in the table (the scale and offset of the bands are not applied). Pixels equal to the band's nodata value, and NaN pixels of floating point bands, are ignored. RASTER_ALGEBRA requires RaQuet v0.5.0 inputs.
Learn more about loading raster data as raster tables in Snowflake following this guide.
RASTER_VALUES
RASTER_VALUES(raster_table, vector_query, output_expression, output_table, options)Description
Returns each pixel and associated values from a output_expression across all bands in a given area of interest of a raster table. The result will include the data from the vector_query as well as from all bands, corresponding to the pixels that intersect each geography.
Input parameters
raster_table:VARCHARthe qualified table name of the raster table, e.g.'<my-database>.<my-schema>.<my-raster-table>'.vector_query:VARCHARquery containing the area of interest in which to perform the extraction, stored in a column namedgeom. Additional columns can be included into this query in order to be referenced from theoutput_expression. It can beNULL, in which case all values stored in the raster table will be extracted.output_expression:VARCHARcontains the bands and values to be extracted from the raster. This expression support alias. It does not support aggregations. If you need to use aggregations, use theRASTER_AGG_VALUESfunction. This expression can beNULLif apixelcolumn is added using theinclude_pixeloption.output_table:VARCHARwhere the resulting table will be stored. It must be aVARCHARof the form'<database>.<schema>.<table>'. The schema must exist and the caller needs to have permissions to create a new table on it. The process will fail if the target table already exists.options:VARCHARa JSON string with additional options:OptionDescriptioninclude_pixelBOOLEANwhether to include thepixelcolumn of the extracted pixel values, in quadbin format. Default isfalse.
Result
The result is a table with the corresponding values extracted from the output_expression and, if selected, a pixel column with quadbin indexes.
Examples
Extract band_1 values for raster pixels intersected by each point in the vector query. The output will be stored in a table.
Extract band_1 values for the raster pixels intersected by each polygon in the vector query. The output will be stored in a table.
Extract band_1, band_2 values wih alias names for the raster pixels intersected by all the geographies in the vector table. It will include the input columns except geom. The output will be stored in a table.
Extract band_1 values for raster pixels intersected by each point in the vector table. It will include the input columns except geom. The output will be stored in a table. The option "include_pixel" can be set to true to include the pixel value in quadbin format.
RASTER_AGG_VALUES
Description
Returns aggregated values for all pixels intersecting the specified geometries, according to an output_expression.
Input parameters
raster_table:VARCHARthe qualified table name of the raster table, e.g.'<my-database>.<my-schema>.<my-raster-table>'.input_query:VARCHARquery containing the area of interest in which to perform the aggregation, stored in a column namedgeom. Additional columns can be included into this query in order to be referenced from theoutput_expression. It can beNULL, in which case all values stored in the raster table will be used.output_expression:VARCHARcontains the aggregated values to be computed from the raster. For extracting non-aggregated values, use theRASTER_VALUESfunction. This expression cannot beNULL.output_table:VARCHARwhere the resulting table will be stored. It must be aVARCHARof the form'<database>.<schema>.<table>'. The schema must exist and the caller needs to have permissions to create a new table on it. The process will fail if the target table already exists.options:VARCHARa JSON string with additional options.OptionDescriptiongroupby_vector_columnsARRAYgroup by extra columns included in thevector_query, in addition to thegeomcolumn. It does not take effect whenvector_queryisNULL.groupby_raster_columnsARRAYgroup by extra columns included in theraster_table, in addition to thegeomcolumn.
Result
The result is a table with the corresponding aggregated values from the output_expression.
Examples
Aggregate band_1 values for the raster pixels intersected by each polygon in the vector query. The output will be stored in a table.
Aggregate band_1, band_2 values wih different aggregations for the raster pixels intersected by all the geographies in the vector table. It will include the input columns. The output will be stored in a table.
Aggregate band_1 values for the raster pixels intersected by each polygon in the vector table. It will include the input columns. The option groupby_vector_columns will be set to id (unique-id) to aggregate with duplicated geographies. The output will be stored in a table.
RASTER_ALGEBRA
Description
Computes a new raster from one or more input rasters by evaluating a user-defined expression pixel by pixel. The result is written as a new RaQuet v0.5.0 raster table.
Inputs are referenced in the expression as $a, $b, $c, … in the order in which they are passed. Their bands are referenced as $a.band_1 (by band name) or $a[1] (by 1-based band index). A single-band input can be referenced simply as $a.
Input parameters
input_rasters:ARRAYthe qualified names of the input RaQuet raster tables, e.g.ARRAY_CONSTRUCT('<my-database>.<my-schema>.<before>', '<my-database>.<my-schema>.<after>'). The first one is$a, the second one$b, and so on. All inputs must be referenced in the expression.expression:VARCHARthe expression to compute. Several output bands can be computed at once by separating expressions with;and optionally naming them:'ndvi = ($a.band_4 - $a.band_3) / ($a.band_4 + $a.band_3); vegetation = $a.band_4 > 1000'. Unnamed outputs are calledband_1,band_2, … The expression supports:SyntaxDescription+,-,*,/,%,^(or**)Arithmetic.
^is right-associative and binds tighter than unary minus:-$a ^ 2is-($a ^ 2).<,<=,>,>=,==,!=Comparisons, returning
1or0.and,or,not(or&&,||,!)Logical operators, returning
1or0.if(condition, a, b)awhereconditionis not0,botherwise.abs,sqrt,exp,log,log10,log2,pow,min,max,floor,ceil,round,clamp(x, lo, hi),sin,cos,tan,atan,atan2Math functions.
pi,eConstants.
logis the natural logarithm.roundrounds halves up (round(-2.5)is-2), also when results are rounded to an integeroutput_type.output_table:VARCHARthe table where the resulting raster will be stored, of the form'<my-database>.<my-schema>.<my-output-table>'. The schema must exist and the caller needs permissions to create a new table on it. The process will fail if the target table already exists or if it is one of the inputs.options:VARCHARa JSON string with additional options, orNULL:OptionDescriptionoutput_typeSTRINGdata type of the output bands:uint8,int8,uint16,int16,uint32,int32,float32orfloat64. Default isfloat32. Integer results are rounded; values that do not fit the type become nodata.output_nodataNUMBERorSTRINGnodata value of the output bands. Default is"NaN"for floating point types and the minimum (signed) or maximum (unsigned) value for integer types, e.g.255foruint8: set it explicitly when that value is a valid result, e.g. for 0/255 masks.overviewsSTRINGevaluate(default) computes the expression on every zoom level present in all the inputs, so the result can be visualized at any zoom right away.nonecomputes the native resolution only. Note that for non-linear expressions, overview pixels are computed from the inputs' overview pixels.apply_scale_offsetBOOLwhether band values are converted to physical values (value * scale + offset, from the band metadata) before evaluating the expression. Default istrue; bands without scale and offset are used as they are. Set it tofalseto work on the stored values.compressionSTRINGcompression of the output raster tiles:gzip(default) ornone. The compression of the input rasters is read from their metadata.compression_levelINTEGERgzip level of the output raster tiles, between 1 and 9. Default is1, which is noticeably cheaper to compute than higher levels while producing tiles of almost the same size. It is ignored whencompressionisnone.
Nodata
An output pixel is nodata when any of the input pixels referenced by its expression is nodata, or when the result is not a finite number (e.g. a division by zero or the logarithm of a negative number). Blocks where every output pixel is nodata are not written.
Grid alignment
All inputs must use the same block size and the same native resolution (max_zoom in their metadata). Their extents do not need to match: each output band covers the area where all the inputs referenced by its expression have data. Rasters with a different resolution must be re-imported with a common resolution; they are not resampled automatically.
Output
The output table is a RaQuet v0.5.0 raster with one column per output band, per-tile statistics columns (<BAND>_COUNT, _MIN, _MAX, _SUM, _MEAN, _STDDEV) and a metadata row (BLOCK = 0) with the band statistics and the expression used. Column names are upper case, following the Snowflake convention for RaQuet tables; band names in the metadata keep the case used in the expression. Input band columns are matched to the metadata band names case-insensitively.
Limitations
Input rasters must be RaQuet v0.5.0 rasters, such as those written by the raquet tools. Rasters with a time dimension and rasters with lossy (JPEG/WebP) compression are not supported.
Inputs must share block size and native resolution. Automatic resampling or reprojection is not supported.
Examples
Difference between two rasters, e.g. signal coverage before and after deploying a new site:
NDVI and a vegetation mask from a single multi-band raster:
Solar potential (in hundredths) where the elevation is above 1,000 m and 0 elsewhere, as 16-bit integers:
Last updated
Was this helpful?
