Estoy tratando de ejecutar una instrucción insert con mi HiveContext, como este:

hiveContext.sql('insert into my_table (id, score) values (1, 10)')

La 1.5.2 Chispa Documentación de SQL no declarar explícitamente si este es compatible o no, aunque admite la «dinámica de la partición de inserción».

Esto conduce a una traza de la pila como

AnalysisException: 
Unsupported language features in query: insert into my_table (id, score) values (1, 10)
TOK_QUERY 0, 0,20, 0
  TOK_FROM 0, -1,20, 0
    TOK_VIRTUAL_TABLE 0, -1,20, 0
      TOK_VIRTUAL_TABREF 0, -1,-1, 0
        TOK_ANONYMOUS 0, -1,-1, 0
      TOK_VALUES_TABLE 1, 13,20, 41
        TOK_VALUE_ROW 1, 15,20, 41
          1 1, 16,16, 41
          10 1, 19,19, 44
  TOK_INSERT 1, 0,-1, 12
    TOK_INSERT_INTO 1, 0,11, 12
      TOK_TAB 1, 4,4, 12
        TOK_TABNAME 1, 4,4, 12
          my_table 1, 4,4, 12
      TOK_TABCOLNAME 1, 7,10, 22
        id 1, 7,7, 22
        score 1, 10,10, 26
    TOK_SELECT 0, -1,-1, 0
      TOK_SELEXPR 0, -1,-1, 0
        TOK_ALLCOLREF 0, -1,-1, 0

scala.NotImplementedError: No parse rules for:
 TOK_VIRTUAL_TABLE 0, -1,20, 0
  TOK_VIRTUAL_TABREF 0, -1,-1, 0
    TOK_ANONYMOUS 0, -1,-1, 0
  TOK_VALUES_TABLE 1, 13,20, 41
    TOK_VALUE_ROW 1, 15,20, 41
      1 1, 16,16, 41
      10 1, 19,19, 44

¿Hay alguna otra manera de insertar a una Colmena tabla que es compatibles?

6 Comentarios

  1. 23

    De datos puede ser añadido a una Colmena tabla con el append modo en el DataFrameWriter.

    data = hc.sql("select 1 as id, 10 as score")
    data.write.mode("append").saveAsTable("my_table")
    

    Esto da el mismo resultado que una inserción.

    • Quiero escribir a una tabla existente. ¿Cómo puedo hacer eso? Estoy usando Chispa 1.1.0 , que no tiene método de la escritura . ¿qué puedo hacer en ese caso?
    • Te importa aceptar la respuesta por favor para que podamos cerrar esta pregunta ? 🙂
    • He hecho un anexar en el método que usted haya especificado, pero cuando hago un select * en la sección de la tabla que estoy recibiendo la anexa filas en la parte superior, en lugar de estar en la parte inferior
    • No estoy seguro de que su pregunta estaba destinada a mí.
    • Esta respuesta no funciona en mi caso. Me sale un error: AnalysisException: 'Saving data in the Hive serde table `mytable` is not supported yet. Please use the insertInto() API as an alternative..;'
    • Sólo la adición de un punto. Yo era capaz de insertar en la colmena de la tabla utilizando la chispa de la versión 2.3. Sólo tienes que excluir de la lista de columnas de la instrucción insert. ver enlace stackoverflow.com/questions/53812634/…

  2. 13

    He tenido el mismo problema (Chispa 1.5.1), y probado diferentes versiones.

    Dado

    sqlContext.sql("create table my_table(id int, score int)")
    

    Las únicas versiones que trabajó este aspecto:

    sqlContext.sql("insert into table my_table select t.* from (select 1, 10) t")
    sqlContext.sql("insert into       my_table select t.* from (select 2, 20) t")
    
    • ¿Cómo podemos agregar variables en la consulta?
    • También es una solución viable para el trabajo en caso de que usted tiene una tabla de origen con la misma clave de tabla de destino.. Funciona en la chispa de la 1.5
    • Funciona gr8…Gracias
    • utilizar el formato de Cadena en Pyspark para el uso de la variable quiero decir, como en el anterior ejemplo sqlContext.sql(«insert into my_table seleccione t.* a partir de (seleccionar 2, {variable}) t».formato(variable = 20)) ### aquí en lugar de 20 usted puede cualquier variable
  3. 8

    La aceptada respuesta saveAsTable falla para mí con un AnalysisException (no entiendo por qué). Lo que funciona para mí, en cambio, es:

    data = hc.sql("select 1 as id, 10 as score")
    data.write.mode("append").insertInto("my_table")
    

    Estoy usando Chispa v2.1.0.

  4. 1

    Se trató de llevar a cabo algo que el formato de archivo de datos no puede, por lo tanto el Unsupported language features in query excepción.

    Muchas formato de archivo de datos se puede escribir una vez y sin apoyo de ÁCIDO operación.

    Apache ORC apoya ÁCIDO operación si es necesario.

    Lugar, puede utilizar la partición para dividir los datos en carpetas (/data/año=2017/mes=10….), aquí usted puede añadir/insertar datos en sus datos lago.

  5. -1

    probar este hiveContext.sql("insert into table my_table select 1, 10")
    si usted no cambia su dinámica de la partición de modo que nonstrict, usted tiene que hacer esto hiveCtx.setConf("hive.exec.dynamic.partition.mode", "nonstrict")

    • ¿Por qué debe el OP «prueba este código»? Un buena respuesta siempre tiene una explicación de lo que se hace y por qué se hizo de tal manera, no sólo para el OP, pero para los futuros visitantes de hacerlo.
    • Además, no funciona … ver Berylium la respuesta de abajo, funciona
  6. -1

    Al primer tiempo de hacer este

    $data.write.mode("append").saveAsTable("my_table")
    

    debe reemplazar "append" con "overwrite", a Continuación, puede utilizar "append".

Dejar respuesta

Please enter your comment!
Please enter your name here