Estoy viniendo a través de una pieza de código en Apache Hive como regexp_extract(entrada, ‘[0-9]*’, 0), por favor alguien Puede explicarme lo de este código? Gracias

OriginalEl autor user1653240 | 2013-01-17

2 Comentarios

  1. 19

    De la Colmena manual de DDL, se devuelve la cadena de caracteres extraídos utilizando el patrón. por ejemplo, regexp_extract('foothebar', 'foo(.*?)(bar)', 2) devuelve bar.

    La index parámetro es la captura de grupo, que es un entero que puede tomar los siguientes valores:

    • 0: todo el partido, en mi ejemplo sería foothebar
    • 1: el primer grupo, en mi ejemplo sería the
    • 2: el segundo grupo, en mi ejemplo sería bar
    • n: el enésimo grupo. Si n es mayor que el número real de los grupos definidos en su regexp, su Colmena consulta se producirá un error.

    En tu ejemplo, regexp_extract(input, '[0-9]*', 0), que está buscando todo el partido para su columna identificada por input y comenzando con un valor numérico.

    Aquí un par de ejemplos:

    • regexp_extract('9eleven', '[0-9]*', 0) -> devuelve 9
    • regexp_extract('9eleven', '[0-9]*', 1) -> consulta falla
    • regexp_extract('911test', '[0-9]*', 0) -> devuelve 911
    • regexp_extract('911test', '[0-9]*', 1) -> consulta falla
    • regexp_extract('eleven', '[0-9]*', 0) -> devuelve cadena vacía
    • regexp_extract('test911', '[0-9]*', 0) -> devuelve cadena vacía
    qué significa que regexp_extract(entrada, ‘[0-9]*’, 0) sólo coincidirá con entrada comienza con un valor numérico? Gracias. Por favor, puedes dar algunos ejemplos?
    He añadido algunos ejemplos en la respuesta.
    así que generalizar, la función con retorno cadena no vacía si la entrada comienza con uno o más números enteros?
    Estás en lo correcto.
    Es allí una manera de conseguir «55» y al «911» utilizando el mismo patrón [0-9]* es decir regexp_extract('55test911', '[0-9]*', X)? Se debe trabajar el uso de un identificador global (con php por ejemplo), pero ¿cómo hacerlo con la colmena ? Sé que podría utilizar otro patrón, pero me pregunto acerca de la solución de este caso específico 🙂

    OriginalEl autor Charles Menguy

  2. 3

    La respuesta anterior es parcialmente incorrecta. regexp_extract('test911', '[0-9]*', 0) ciertamente retorno al 911. Nunca hemos de especificar el inicio de la cadena antes de [0-9]*

    Por favor pon un comentario

    OriginalEl autor yupyupyupyup

Dejar respuesta

Please enter your comment!
Please enter your name here