Al crear índices para tipos temporales, lo que se almacena en el índice no es el valor real sino un cuadro delimitador que representa el valor. En este caso, el índice proporcionará una lista de valores candidatos que pueden satisfacer el predicado de la consulta, y se necesita un segundo paso para filtrar los valores candidatos calculando el predicado de la consulta sobre los valores reales.
Sin embargo, cuando los cuadros delimitadores tienen un gran espacio vacío no cubierto por los valores reales, el índice generará muchos valores candidatos que no satisfacen el predicado de la consulta, lo que reduce la eficiencia del índice. En estas situaciones, puede ser mejor representar un valor no con un cuadro delimitador único, sino con múltiples cuadros delimitadores. Esto aumenta considerablemente la eficiencia del índice, siempre que el índice sea capaz de gestionar múltiples cuadros delimitadores por valor. Las siguientes funciones se utilizan para generar múltiples cuadros delimitadores para un único valor temporal.
Devuelve una matriz de N rangos de tiempo a partir de los instantes o segmentos de un valor temporal
splitNSpans(temp, integer) → tstzspan[]
La elección entre instantes o segmentos depende de si la interpolación es discreta o continua. El último argumento especifica el número de rangos de salida. Si el número de instantes o segmentos es inferior o igual al número especificado, la matriz resultante tendrá un rango por instante o segmento del valor temporal. En caso contrario, el número de rangos especificado se obtendrá fusionando instantes o segmentos consecutivos.
SELECT splitNSpans(ttext '{A@2000-01-01, B@2000-01-02, A@2000-01-03, B@2000-01-04, A@2000-01-05}', 1); -- {"[2000-01-01, 2000-01-05]"} SELECT splitNSpans(tfloat '{1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 2@2000-01-04, 1@2000-01-05}', 2); -- {"[2000-01-01, 2000-01-03]","[2000-01-04, 2000-01-05]"} SELECT splitNSpans(tgeompoint '[Point(1 1)@2000-01-01, Point(2 2)@2000-01-02, Point(1 1)@2000-01-03, Point(2 2)@2000-01-04, Point(1 1)@2000-01-05]', 2); -- {"[2000-01-01, 2000-01-03]","[2000-01-03, 2000-01-05]"} SELECT splitNSpans(tgeogpoint '{[Point(1 1 1)@2000-01-01, Point(2 2 2)@2000-01-02], [Point(1 1 1)@2000-01-03, Point(2 2 2)@2000-01-04], [Point(1 1 1)@2000-01-05]}', 2); -- {"[2000-01-01, 2000-01-04])","[2000-01-05, 2000-01-05])"} SELECT splitNSpans(tint '{1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 2@2000-01-04, 2@2000-01-05}', 6); /* {"[2000-01-01, 2000-01-01]","[2000-01-02, 2000-01-02]","[2000-01-03, 2000-01-03]", "[2000-01-04, 2000-01-04]","[2000-01-05, 2000-01-05]"} */ SELECT splitNSpans(ttext '[A@2000-01-01, B@2000-01-02, A@2000-01-03, B@2000-01-04, A@2000-01-05]', 6); /* {"[2000-01-01, 2000-01-02]","[2000-01-02, 2000-01-03]", "[2000-01-03, 2000-01-04]","[2000-01-04, 2000-01-05]"} */
Devuelve una matriz de rangos de tiempo obtenida fusionando N instantes o segmentos consecutivos de un valor temporal
splitEachNSpans(temp, integer) → tstzspan[]
La elección entre instantes o segmentos depende de si la interpolación es discreta o continua. El último argumento especifica el número de instantes o segmentos de entrada que se fusionan para producir un rango de salida. Si el número de instantes o segmentos es inferior o igual al número especificado, la matriz resultante tendrá un único rango por secuencia. En caso contrario, el número especificado de instantes o segmentos consecutivos será fusionado en cada rango de salida. Observe que, a diferencia de la función splitNSpans
, el número de cuadros en el resultado depende del número de instantes o de segmentos de entrada.
SELECT splitEachNSpans(ttext '{A@2000-01-01, B@2000-01-02, A@2000-01-03, B@2000-01-04, A@2000-01-05}', 1); /* {"[2000-01-01, 2000-01-01]","[2000-01-02, 2000-01-02]","[2000-01-03, 2000-01-03]", "[2000-01-04, 2000-01-04]","[2000-01-05, 2000-01-05]} */ SELECT splitEachNSpans(tfloat '[1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 2@2000-01-04, 1@2000-01-05]', 2); -- {"[2000-01-01, 2000-01-03]","[2000-01-03, 2000-01-05]"} SELECT splitEachNSpans(tgeompoint '{[Point(1 1 1)@2000-01-01, Point(2 2 2)@2000-01-02], [Point(1 1 1)@2000-01-03, Point(2 2 2)@2000-01-04], [Point(1 1 1)@2000-01-05]}', 2); -- {"[2000-01-01, 2000-01-02]","[2000-01-03, 2000-01-04]","[2000-01-05, 2000-01-05]"} SELECT splitEachNSpans(tgeogpoint '[Point(1 1 1)@2000-01-01, Point(2 2 2)@2000-01-02, Point(1 1 1)@2000-01-03, Point(2 2 2)@2000-01-04, Point(1 1 1)@2000-01-05]', 6); -- {"[2000-01-01, 2000-01-05])"} SELECT splitEachNSpans(tgeogpoint '{[Point(1 1 1)@2000-01-01, Point(2 2 2)@2000-01-02], [Point(1 1 1)@2000-01-03, Point(2 2 2)@2000-01-04], [Point(1 1 1)@2000-01-05]}', 6); -- {"[2000-01-01, 2000-01-02]","[2000-01-03, 2000-01-04]","[2000-01-05, 2000-01-05]"}
Devuelve una matriz de N cuadros temporales obtenida fusionando los instantes o segmentos de un número temporal
splitNTboxes(tnumber, integer) → tbox[]
La elección entre instantes o segmentos depende de si la interpolación es discreta or continua. El último argumento especifica el número de cuadros de salida. Si el número de instantes o segmentos es inferior o igual al numéro especificado, la matriz resultante tendrá un cuadro por instante o segmento del número temporal. En caso contrario, En caso contrario, el número de cuadros especificado se obtendrá fusionando instantes o segmentos consecutivos.
SELECT splitNTboxes(tint '{1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05}', 1); -- {"TBOXINT XT([1, 5),[2000-01-01, 2000-01-05])"} SELECT splitNTboxes(tfloat '{[1@2000-01-01, 2@2000-01-02], [1@2000-01-03, 4@2000-01-04], [1@2000-01-05]}', 2); /* {"TBOXFLOAT XT([1, 4],[2000-01-01, 2000-01-04])", "TBOXFLOAT XT([1, 1],[2000-01-05, 2000-01-05])"} */ SELECT splitNTboxes(tfloat '[1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05]', 3); /* {"TBOXFLOAT XT([1, 2],[2000-01-01, 2000-01-03])", "TBOXFLOAT XT([1, 4],[2000-01-03, 2000-01-04])", "TBOXFLOAT XT([1, 4],[2000-01-04, 2000-01-05])"} */ SELECT splitNTboxes(tint '{1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05}', 6); /* {"TBOXINT XT([1, 2),[2000-01-01, 2000-01-01])", "TBOXINT XT([2, 3),[2000-01-02, 2000-01-02])", "TBOXINT XT([1, 2),[2000-01-03, 2000-01-03])", "TBOXINT XT([4, 5),[2000-01-04, 2000-01-04])", "TBOXINT XT([1, 2),[2000-01-05, 2000-01-05])"} */ SELECT splitNTboxes(tint '[1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05]', 6); /* {"TBOXINT XT([1, 3),[2000-01-01, 2000-01-02])", "TBOXINT XT([1, 3),[2000-01-02, 2000-01-03])", "TBOXINT XT([1, 5),[2000-01-03, 2000-01-04])", "TBOXINT XT([1, 5),[2000-01-04, 2000-01-05])"} */
Devuelve una matriz de cuadros temporales obtenida fusionando N instantes o segmentos consecutivos de un número temporal
splitEachNTboxes(tnumber, integer) → tbox[]
La elección entre instantes o segmentos depende de si la interpolación es discreta or continua. El último argumento especifica el número de instantes o segmentos de entrada que se fusionan para producir un cuadro de salida. Si el número de instantes o segmentos es inferior o igual al número especificado, la matriz resultante tendrá un único cuadro por secuencia. En caso contrario, el número especificado de instantes o segmentos consecutivos será fusionado en cada cuadro de salida. Observe que, a diferencia de la función splitNTboxes
, el número de cuadros en el resultado depende del número de instantes o de segmentos de entrada.
SELECT splitEachNTboxes(tint '{1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05}', 1); /* {"TBOXINT XT([1, 2),[2000-01-01, 2000-01-01])", "TBOXINT XT([2, 3),[2000-01-02, 2000-01-02])", "TBOXINT XT([1, 2),[2000-01-03, 2000-01-03])", "TBOXINT XT([4, 5),[2000-01-04, 2000-01-04])"} */ SELECT splitEachNTboxes(tint '[1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05]', 1); /* {"TBOXINT XT([1, 3),[2000-01-01, 2000-01-02])", "TBOXINT XT([1, 3),[2000-01-02, 2000-01-03])", "TBOXINT XT([1, 5),[2000-01-03, 2000-01-04])", "TBOXINT XT([1, 5),[2000-01-04, 2000-01-05])"} */ SELECT splitEachNTboxes(tfloat '[1@2000-01-01, 2@2000-01-02, 1@2000-01-03, 4@2000-01-04, 1@2000-01-05]', 3); /* {"TBOXFLOAT XT([1, 4],[2000-01-01, 2000-01-04])", "TBOXFLOAT XT([1, 4],[2000-01-04, 2000-01-05])"} */ SELECT splitEachNTboxes(tfloat '{[1@2000-01-01, 2@2000-01-02], [1@2000-01-03, 4@2000-01-04], [1@2000-01-05]}', 6); /* {"TBOXFLOAT XT([1, 2],[2000-01-01, 2000-01-02])", "TBOXFLOAT XT([1, 4],[2000-01-03, 2000-01-04])", "TBOXFLOAT XT([1, 1],[2000-01-05, 2000-01-05])"} */
Devuelve ya sea una matriz de N cuadros espaciales obtenida fusionando los segmentos de una (multi)línea o una matriz de N cuadros espaciotemporales obtenida fusionando los instantes o segmentos de un punto temporal
splitNStboxes(lines, integer) → stbox[]
splitNStboxes(tpoint, integer) → stbox[]
Para puntos temporales, la elección entre instantes o segmentos depende de si la interpolación es discreta or continua. El último argumento especifica el número de cuadros de salida. Si el número de instantes o segmentos es menor que el número dado, la matriz resultante tendrá un cuadro por segmento de la (multi)línea o un cuadro por instante o segmento del punto temporal. En caso contrario, el número de cuadros especificado se obtendrá fusionando instantes o segmentos consecutivos.
SELECT splitNStboxes(geometry 'Linestring(1 1,2 2,3 1,4 2,5 1)', 1); -- {"STBOX X((1,1),(5,2))"} SELECT splitNStboxes(geometry 'Linestring(1 1,2 2,3 1,4 2,5 1)', 2); -- {"STBOX X((1,1),(3,2))","STBOX X((3,1),(5,2))"} SELECT splitNStboxes(geography 'Linestring(1 1 1,2 2 1,3 1 1,4 2 1,5 1 1)', 6); /* {"SRID=4326;GEODSTBOX Z((1,1,1),(2,2,1))", "SRID=4326;GEODSTBOX Z((2,1,1),(3,2,1))", "SRID=4326;GEODSTBOX Z((3,1,1),(4,2,1))", "SRID=4326;GEODSTBOX Z((4,1,1),(5,2,1))"} */ SELECT splitNStboxes(geometry 'MultiLinestring((1 1,2 2),(3 1,4 2),(5 1,6 2))', 2); -- {"STBOX X((1,1),(4,2))","STBOX X((5,1),(6,2))"}
SELECT splitNStboxes(tgeompoint '{Point(1 1)@2000-01-01, Point(2 2)@2000-01-02, Point(3 1)@2000-01-03, Point(4 2)@2000-01-04, Point(5 1)@2000-01-05}', 1); -- {"STBOX XT(((1,1),(5,2)),[2000-01-01, 2000-01-05])"} SELECT splitNStboxes(tgeompoint '[Point(1 1)@2000-01-01, Point(2 2)@2000-01-02, Point(3 1)@2000-01-03, Point(4 2)@2000-01-04, Point(5 1)@2000-01-05]'); /* {"STBOX XT(((1,1),(2,2)),[2000-01-01, 2000-01-02])", "STBOX XT(((2,1),(3,2)),[2000-01-02, 2000-01-03])", "STBOX XT(((3,1),(4,2)),[2000-01-03, 2000-01-04])", "STBOX XT(((4,1),(5,2)),[2000-01-04, 2000-01-05])"} */ SELECT splitNStboxes(tgeompoint '{[Point(1 1)@2000-01-01, Point(2 2)@2000-01-02], [Point(3 1)@2000-01-03, Point(4 2)@2000-01-04], [Point(5 1)@2000-01-05]}', 2); /* {"STBOX XT(((1,1),(4,2)),[2000-01-01, 2000-01-04])", "STBOX XT(((5,1),(5,1)),[2000-01-05, 2000-01-05])"} */ SELECT splitNStboxes(tgeogpoint '{Point(1 1 1)@2000-01-01, Point(2 2 1)@2000-01-02, Point(3 1 1)@2000-01-03, Point(4 2 1)@2000-01-04, Point(5 1 1)@2000-01-05}', 6); /* {"SRID=4326;GEODSTBOX ZT(((1,1,1),(1,1,1)),[2000-01-01, 2000-01-01])", "SRID=4326;GEODSTBOX ZT(((2,2,1),(2,2,1)),[2000-01-02, 2000-01-02])", "SRID=4326;GEODSTBOX ZT(((3,1,1),(3,1,1)),[2000-01-03, 2000-01-03])", "SRID=4326;GEODSTBOX ZT(((4,2,1),(4,2,1)),[2000-01-04, 2000-01-04])", "SRID=4326;GEODSTBOX ZT(((5,1,1),(5,1,1)),[2000-01-05, 2000-01-05])"} */ SELECT splitNStboxes(tgeompoint '[Point(1 1)@2000-01-01, Point(2 2)@2000-01-02, Point(3 1)@2000-01-03, Point(4 2)@2000-01-04, Point(5 1)@2000-01-05]', 6); /* {"STBOX XT(((1,1),(2,2)),[2000-01-01, 2000-01-02])", "STBOX XT(((2,1),(3,2)),[2000-01-02, 2000-01-03])", "STBOX XT(((3,1),(4,2)),[2000-01-03, 2000-01-04])", "STBOX XT(((4,1),(5,2)),[2000-01-04, 2000-01-05])"} */
Devuelve ya sea una matriz de cuadros espaciales obtenida fusionando N segmentos consecutivos de una (multi)línea o una matriz de cuadros espaciotemporales obtenida fusionando N instantes o segmentos consecutivos de un punto temporal
splitEachNStboxes(lines, integer) → stbox[]
splitEachNStboxes(tpoint, integer) → stbox[]
Para puntos temporales, la elección entre instantes o segmentos depende de si la interpolación es discreta or continua. El último argumento especifica el número de instantes o segmentos de entrada que se fusionan para producir un cuadro de salida. Si el número de instantes o segmentos es menor que el número dado, la matriz resultante tendrá un único cuadro por secuencia. En caso contrario, el número especificado de instantes o segmentos consecutivos será fusionado en cada cuadro de salida. Observe que, a diferencia de la función splitNStboxes
, el número de cuadros en el resultado depende del número de instantes o de segmentos de entrada.
SELECT splitEachNStboxes(geometry 'Linestring(1 1,2 2,3 1,4 2,5 1)', 1); -- {"STBOX X((1,1),(5,2))"} SELECT splitEachNStboxes(geometry 'Linestring(1 1,2 2,3 1,4 2,5 1)', 2); -- {"STBOX X((1,1),(3,2))","STBOX X((3,1),(5,2))"} SELECT splitEachNStboxes(geography 'Linestring(1 1 1,2 2 1,3 1 1,4 2 1,5 1 1)', 6); /* {"SRID=4326;GEODSTBOX Z((1,1,1),(2,2,1))", "SRID=4326;GEODSTBOX Z((2,1,1),(3,2,1))", "SRID=4326;GEODSTBOX Z((3,1,1),(4,2,1))", "SRID=4326;GEODSTBOX Z((4,1,1),(5,2,1))"} */ SELECT splitEachNStboxes(geometry 'MultiLinestring((1 1,2 2),(3 1,4 2),(5 1,6 2))', 2); -- {"STBOX X((1,1),(4,2))","STBOX X((5,1),(6,2))"}
SELECT splitEachNStboxes(tgeompoint '{Point(1 1)@2000-01-01, Point(2 2)@2000-01-02, Point(3 1)@2000-01-03, Point(4 2)@2000-01-04, Point(5 1)@2000-01-05}', 1); /* {"STBOX XT(((1,1),(1,1)),[2000-01-01, 2000-01-01])", "STBOX XT(((2,2),(2,2)),[2000-01-02, 2000-01-02])", "STBOX XT(((3,1),(3,1)),[2000-01-03, 2000-01-03])", "STBOX XT(((4,2),(4,2)),[2000-01-04, 2000-01-04])", "STBOX XT(((5,1),(5,1)),[2000-01-05, 2000-01-05])"} */ SELECT splitEachNStboxes(tgeompoint '[Point(1 1)@2000-01-01, Point(2 2)@2000-01-02, Point(3 1)@2000-01-03, Point(4 2)@2000-01-04, Point(5 1)@2000-01-05]', 1); /* {"STBOX XT(((1,1),(2,2)),[2000-01-01, 2000-01-02])", "STBOX XT(((2,1),(3,2)),[2000-01-02, 2000-01-03])", "STBOX XT(((3,1),(4,2)),[2000-01-03, 2000-01-04])", "STBOX XT(((4,1),(5,2)),[2000-01-04, 2000-01-05])"} */ SELECT splitEachNStboxes(tgeogpoint '{[Point(1 1)@2000-01-01, Point(2 2)@2000-01-02], [Point(3 1)@2000-01-03, Point(4 2)@2000-01-04], [Point(5 1)@2000-01-05]}', 2); /* {"SRID=4326;GEODSTBOX XT(((1,1),(2,2)),[2000-01-01, 2000-01-02])", "SRID=4326;GEODSTBOX XT(((3,1),(4,2)),[2000-01-03, 2000-01-04])", "SRID=4326;GEODSTBOX XT(((5,1),(5,1)),[2000-01-05, 2000-01-05])"} */