PDA

Ver la Versión Completa : Consultas muy grandes


cahp
20-02-2012, 10:15:33
Hola a todos,

tenemos una aplicacion con hibernate y SQL server, estoy intentando migrar a Firebird, pero las consultas muy grandes que genera Hibernate (mas de 100000 caracteres), no las soporta Firebird.

Alguien sabe si se puede cambiar el numero maximo de caracteres en una consulta SQL en firebird, o bien alguie sabe de otra solucion?

Muchas gracias.

Saludos.

Casimiro Notevi
20-02-2012, 11:22:08
Con Sql server, ¿te refieres a MS sql?
Quizás puedas dividir la sentencia en un par de ellas o también podrás reducirla, supongo.
En fin, no sabría decirte porque no sabemos qué sentencia sql es.
¿Has visto el documento (http://www.firebirdsql.org/pdfmanual/MSSQL-to-Firebird.pdf) de pasar mssql a firebird?

Por cierto, otra vez procura poner un título más descriptivo, gracias.

guillotmarc
20-02-2012, 11:42:59
Hola.

Que yo sepa el tamaño máximo de una fila en Firebird es de 64.535 bytes, y no se puede modificar.

http://firebirdmanual.com/firebird/es/firebird-manual/2/limites-de-firebird/36

Si no puedes modificar tu estructura/consultas, no sé si vas a poder sortear este problema.

Saludos.

cahp
20-02-2012, 11:58:30
Gracias por las respuestas

Con Sql server, ¿te refieres a MS sql?
Quizás puedas dividir la sentencia en un par de ellas o también podrás reducirla, supongo.
En fin, no sabría decirte porque no sabemos qué sentencia sql es.
¿Has visto el documento (http://www.firebirdsql.org/pdfmanual/MSSQL-to-Firebird.pdf) de pasar mssql a firebird?

Por cierto, otra vez procura poner un título más descriptivo, gracias.

es MS sql.
el documento lo he visto, pero no es problema de algo ms sql, es tema de Hibernate.
Tomo nota para lo del titulo gracias.

Hola.

Que yo sepa el tamaño máximo de una fila en Firebird es de 64.535 bytes, y no se puede modificar.

http://firebirdmanual.com/firebird/es/firebird-manual/2/limites-de-firebird/36

Si no puedes modificar tu estructura/consultas, no sé si vas a poder sortear este problema.

Saludos.

Como he dicho, es la forma en que hibernate realiza las consultas. Por ejemplo

Hibernate: select unidadenti0_.id_unidad as id1_2_0_, unidadenti0_.descripcion as descripc2_2_0_, unidadenti0_.id_empresa as id8_2_0_,
unidadenti0_.fecha_baja as fecha3_2_0_, unidadenti0_.pedir_alto as pedir4_2_0_, unidadenti0_.pedir_ancho as pedir5_2_0_,
unidadenti0_.pedir_largo as pedir6_2_0_, unidadenti0_.simbolo as simbolo2_0_
from pre_unidades unidadenti0_
where unidadenti0_.id_unidad=?

siempre utiliza todas los campos con sus alias definidos por el. Y lo hace automaticamente.

Tendremos que intentar optimizar y olvidarnos de Firebird.

Saludos y gracias.

Casimiro Notevi
20-02-2012, 12:44:01
A eso quería llegar, puedes recortar mucho:

select unidadenti0_.id_unidad as id1_2_0_, unidadenti0_.descripcion as descripc2_2_0_, unidadenti0_.id_empresa as id8_2_0_,
unidadenti0_.fecha_baja as fecha3_2_0_, unidadenti0_.pedir_alto as pedir4_2_0_, unidadenti0_.pedir_ancho as pedir5_2_0_,
unidadenti0_.pedir_largo as pedir6_2_0_, unidadenti0_.simbolo as simbolo2_0_
from pre_unidades unidadenti0_
where unidadenti0_.id_unidad=?

Puedes sustituir unidadenti0_ por u, por ejemplo, o directamente eliminarlo en este caso, no hace falta.

select id_unidad as id1_2_0_, descripcion as descripc2_2_0_, id_empresa as id8_2_0_,
fecha_baja as fecha3_2_0_, pedir_alto as pedir4_2_0_, pedir_ancho as pedir5_2_0_,
pedir_largo as pedir6_2_0_, simbolo as simbolo2_0_
from pre_unidades
where id_unidad=?

fjcg02
20-02-2012, 13:26:39
Hibernate: select U.id_unidad as id1_2_0_, U.descripcion as descripc2_2_0_, U.id_empresa as id8_2_0_,
U.fecha_baja as fecha3_2_0_, U.pedir_alto as pedir4_2_0_, U.pedir_ancho as pedir5_2_0_,
U.pedir_largo as pedir6_2_0_, U.simbolo as simbolo2_0_
from pre_unidades U
where U.id_unidad=?

No recuerdo en qué ocasión me ocurrió, pero me pasó lo mismo. Lo solucionamos incluyendo alias en las tablas, y quitando o modificando los alias de los campos. En definitiva, lo que propone también Casimiro.
Creo que era con Oracle y Delphi 2.

Saludos

Casimiro Notevi
20-02-2012, 13:52:30
Y se puede reducir mucho más, teniendo en cuenta que es para una exportación no hace falta los alias, sólo los datos:

select id_unidad, descripcion, id_empresa, fecha_baja, pedir_alto, pedir_ancho, pedir_largo, simbolo
from pre_unidades
where id_unidad=?

guillotmarc
20-02-2012, 14:07:58
Como he dicho, es la forma en que hibernate realiza las consultas. Por ejemplo

Código SQL [-] (http://www.clubdelphi.com/foros/#)Hibernate: select unidadenti0_.id_unidad as id1_2_0_, unidadenti0_.descripcion as descripc2_2_0_, unidadenti0_.id_empresa as id8_2_0_, unidadenti0_.fecha_baja as fecha3_2_0_, unidadenti0_.pedir_alto as pedir4_2_0_, unidadenti0_.pedir_ancho as pedir5_2_0_, unidadenti0_.pedir_largo as pedir6_2_0_, unidadenti0_.simbolo as simbolo2_0_ from pre_unidades unidadenti0_ where unidadenti0_.id_unidad=?


siempre utiliza todas los campos con sus alias definidos por el. Y lo hace automaticamente.

Tendremos que intentar optimizar y olvidarnos de Firebird.

Saludos y gracias.

Por eso te decía de modificar la estructura de la base de datos. Si separas los datos en varias tablas, las consultas serán más pequeñas, y si pones nombres de tabla más cortos, los alias automáticos también serán probablemente más cortos.

Aparte de eso, solo te queda interceptar y simplificar, con las indicaciones que te han dado, las consultas que genera Hibernate (cosa que no sé si es posible).

RONPABLO
20-02-2012, 16:22:02
tal vez me pierdo en algo, pero lo que entiendo es que cuando trata de crear un query muy largo le da un erro?.... sí eso es lo que crees creo que debes buscar por otro lado, yo tengo que soportar de vez en cuando una tabla moustruosa que tiene muchos campos y sobre esa tabala acabo de hacer un query consultando todos sus campos.. miralo acá... y funciona:

select first 1 anananananananana.IDANAMNESIS, anananananananana.IDANAMNESIS_TEXTO,
anananananananana.COMPARACION, anananananananana.FECHA_INGRESO,
anananananananana.FECHA_INGRESO_DATE, anananananananana.NOMBRES,
anananananananana.APELLIDOS, anananananananana.NOMBRE_PACIENTE,
anananananananana.FECHAN_DIA, anananananananana.FECHAN_MES, anananananananana.FECHAN_ANO,
anananananananana.DOCUMENTO_IDENTIDAD, anananananananana.SEXO,
anananananananana.EDAD, anananananananana.EDADMES,
anananananananana.DIRECCION_PACIENTE,
anananananananana.TELF_P, anananananananana.TELF_P_OTRO,
anananananananana.CELULAR_P, anananananananana.NOMBRE_RESPONS,
anananananananana.DIRECCION_RESPONSABLE, anananananananana.TELF_RESP,
anananananananana.TELF_OF_RESP, anananananananana.CELULAR_RESPONSABLE,
anananananananana.BEEPER_RESPONSABLE, anananananananana.COD_BEEPR_RESP,
anananananananana.E_MAIL_RESP, anananananananana.REFERIDO_POR,
anananananananana.TRAT_ODONT_PREV_SI_NO, anananananananana.TRAT_ODONT_PREV_CUALES,
anananananananana.PADC_ENFERM_SI_NO, anananananananana.PADC_ENFERM_CUALES,
anananananananana.RECIBE_ALGUN_MEDIC_SI, anananananananana.RECIBE_ALGUN_MEDIC_CUAL,
anananananananana.PROCED_QUIRUR_SI_NO, anananananananana.PROCED_QUIRUR_CUALES,
anananananananana.REACC_ALERGIC_SI_NO, anananananananana.REACC_ALERGIC_CUALES, anananananananana.ANTECEDENTES_MEDICOS,
anananananananana.ANTECEDENTES_ODONTOLO, anananananananana.OBSERVACIONES, anananananananana.CEDULA_NUMERO,
anananananananana.HIGIENEHORAL, anananananananana.FRECUENCICEPILLADO, anananananananana.USASEDADENTAL,
anananananananana.ENFERMEDAD, anananananananana.CARIES, anananananananana.RECIDIVA, anananananananana.AMALGAMA,
anananananananana.IONOMERO, anananananananana.NOMBREPADRE, anananananananana.TELEFONO_PADRE,
anananananananana.TELEFONOPADRE, anananananananana.NOMBRE_MADRE, anananananananana.TELEFONO_MADRE,
anananananananana.TELEFONOMADRE, anananananananana.NUMEROHERMANOS, anananananananana.RELACIONPADRES,
anananananananana.ENFERMEDADESHERE, anananananananana.ESTADOCIVIL, anananananananana.NIVELESCOLAR,
anananananananana.PESO, anananananananana.ALTURA, anananananananana.SALUDGENERAL, anananananananana.CARDIOP,
anananananananana.PRESION, anananananananana.DIABETES, anananananananana.HEPATITIS, anananananananana.FIEBREREUMATICA,
anananananananana.CONVULCIONES, anananananananana.AMIGDALITIS, anananananananana.ANEMIA, anananananananana.ASMA,
anananananananana.TRAUMAFACIAL, anananananananana.ENFERMEDADESE, anananananananana.HERPES, anananananananana.ALERGIA,
anananananananana.ESTATOMANDO, anananananananana.AESTADOH, anananananananana.AESTADOPORQUE, anananananananana.OTROS,
anananananananana.HPORQUE, anananananananana.ALG_MEDIC_CUALES, anananananananana.A_ESTADO_HOSPIT_MOTIVO,
anananananananana.TIPO_HISTORIA, anananananananana.HEMORRAGIAS, anananananananana.GASTRICOS,
anananananananana.FUMA, anananananananana.EMBARAZO, anananananananana.RADIOTERAPIA, anananananananana.FOTOGRAFIA,
anananananananana.ESTADOCIVILP, anananananananana.PROFESION, anananananananana.NOMBRE_PADRE,
anananananananana.TEL_REMITIDOPOR, anananananananana.ODONTOLOGO, anananananananana.TEL_ODONTOLOGO,
anananananananana.RECOMENDADOPOR, anananananananana.TEL_RECOMENDADOPOR, anananananananana.TRAUMATISMOS,
anananananananana.EMPRESA, anananananananana.TIPO_HISTORIA_ORTODONCIA, anananananananana.TIPO_HISTORIA_ORTOPEDIA,
anananananananana.TERMINOTRAT, anananananananana.DOCTOR, anananananananana.TIPO_PACIENTE,
anananananananana.ESTADO_TRATAMIENTO, anananananananana.RH, anananananananana.CELULAR,
anananananananana.BARRIO, anananananananana.TIPO_USUARIO, anananananananana.CODIGO_EPS,
anananananananana.CODIGO_CIUDAD, anananananananana.CODIGO_DEPARTAMENTO, anananananananana.CODIGO_ZONA,
anananananananana.APELLIDO_SEG, anananananananana.NOMBRE_SEG, anananananananana.ZONA_RECIDENCIAL,
anananananananana.SIDA_SI_NO, anananananananana.TELEFONOACROM, anananananananana.CIRUGIAS,
anananananananana.OBS1, anananananananana.OBS2, anananananananana.OBS3, anananananananana.OBS4,
anananananananana.OBS5, anananananananana.OBS6, anananananananana.OBS7, anananananananana.OBS8,
anananananananana.OBS9, anananananananana.OBS10, anananananananana.OBS11, anananananananana.OBS12,
anananananananana.OBS13, anananananananana.OBS14, anananananananana.OBS15,
anananananananana.CODIGO_EPS_LISTADO, anananananananana.FECHA_AUTORIZADA,
anananananananana.FECHA_INGRESO_REAL, anananananananana.PARENTESCO, anananananananana.NUMERO_AUTORIZACION,
anananananananana.FECHA_NUMERO_AUTORIZACION, anananananananana.HORA_INGRESO, anananananananana.EPS_TELEFONO,
anananananananana.EMERGENCIA, anananananananana.ACOMPANATE, anananananananana.ACOMPANATE_TEL,
anananananananana.PARENTESCO_RESPONSABLE, anananananananana.DOMICILIO, anananananananana.TITULAR,
anananananananana.NUMERO_TTITULAR, anananananananana.FECHA_FINAL, anananananananana.NRO_AFILIACION,
anananananananana.NIVEL_BENEFICIARIO, anananananananana.COD_DOCTOR, anananananananana.ACTIVO,

anananananananana.OBS_ANTESEDENTES, anananananananana.ATENDIDO_POR, anananananananana.CONVENIO,
anananananananana.NOTA_IMPORTANTE, anananananananana.MEDICO, anananananananana.LUGAR,
anananananananana.PROBLE_ESQUE_FACIALES_SN, anananananananana.PROBLE_ESQUE_FACIALES_OBS,

anananananananana.TRAUMA_DENTAL_SN, anananananananana.TRAUMA_DENTAL_OBS, anananananananana.MENARCA_SN,
anananananananana.MENARCA_OBS, anananananananana.MALARES, anananananananana.ASIMETRIAS_SN,
anananananananana.ASIMETRIAS_OBS, anananananananana.IMPORTANTE, anananananananana.DOCUMENTO_RESPONS,
anananananananana.ESTRATO, anananananananana.MOTIVO_DE_CONSULTA, anananananananana.TRAT_ODONT_PREV_CUALES_S,
anananananananana.PADC_ENFERM_CUALES_S, anananananananana.A_ESTADO_HOSPIT_MOTIVO_S,
anananananananana.RECIBE_ALGUN_MEDIC_CUAL_S, anananananananana.REACC_ALERGIC_CUALES_S,
anananananananana.CIRUGIAS_S, anananananananana.CEL_PADRE, anananananananana.CEL_MADRE,
anananananananana.ENFERMEDADESHERE_S, anananananananana.MEDICO_TEL, anananananananana.OCUPACION_PADRE,
anananananananana.OCUPACION_MADRE, anananananananana.TRATAMIENTO_ORTODONCIA_S,
anananananananana.TRATAMIENTO_ORTODONCIA, anananananananana.CIRUGIA_ORAL, anananananananana.CIRUGIA_ORAL_S,
anananananananana.FOTOTERAPIA, anananananananana.FOTOTERAPIA_OBS, anananananananana.REVISION_SISTEMAS,
anananananananana.ENFERMEDAD_TIROIDEA, anananananananana.ENFERMEDAD_TIROIDEA_SN, anananananananana.DISLIPIDEMIA,
anananananananana.DISLIPIDEMIA_SN, anananananananana.OVARIO_POLIQUISTICO,
anananananananana.OVARIO_POLIQUISTICO_SN, anananananananana.ENFERMEDAD_ACTUAL,
anananananananana.EDAD_PADRE, anananananananana.EDAD_MADRE, anananananananana.ACTIVIDAD_ECONOMICA,
anananananananana.ALTERACIONES_HEMATOLOGICAS, anananananananana.COMPLICACIONES_TTO,
anananananananana.TRASTORNO_EMOCIONAL, anananananananana.LUGAR_NACIMIENTO, anananananananana.CORONARIA,
anananananananana.CORONARIA_SN
from TANAMNESIS anananananananana

Casimiro Notevi
20-02-2012, 16:50:42
Si se trata de pasar datos de mssql a firebird también se puede usar ibpump, por ejemplo. En fin, creo que este mensaje, nada más empezar, refleja que no tiene muchas ganas de resolver el asunto:
Tendremos que intentar optimizar y olvidarnos de Firebird.
Puede que esté equivocado, pero parece que van por ahí los tiros ;)

cahp
20-02-2012, 17:08:22
Gracias a todos por vuestro tiempo.

No se trata de una migracion.

Es una aplicacion web, que pretendemos que sea validad para varia plataformas y BBDD, esta inicialmente desarrollada y funcionando sobre MS sql, pero queremos ahora ponerla sobre Firebird, Posgressql, etc.

Si fuera solo para firebird, no habria problema, se rediseñarian y optimiarian las consultas necesarias, pero hibernate se supone que trabaja una capa por encima y es transaparente al SGDB que tiene por debajo.

hemos solcionado de momento el problema, quitando relaciones a las identidades de hibernate y acortando nombres de campo y de tablas.

Saldudos.

cahp
20-02-2012, 17:13:19
Si se trata de pasar datos de mssql a firebird también se puede usar ibpump, por ejemplo. En fin, creo que este mensaje, nada más empezar, refleja que no tiene muchas ganas de resolver el asunto:

Puede que esté equivocado, pero parece que van por ahí los tiros ;)


estas equivocado, he trabajado mucho tiempo con firebird y por eso es la primera que estamos intentando hacer funcionar.

Hay un error en mi comentario:
Tendremos que intentar optimizar y olvidarnos de Firebird.

era concretamente: Tendremos que intentar optimizar u olvidarnos de Firebird.

Perdon por la confusion.

Saludos

Casimiro Notevi
20-02-2012, 17:24:09
Aclarado :)

RONPABLO
20-02-2012, 17:26:59
Gracias a todos por vuestro tiempo.

No se trata de una migracion.

Es una aplicacion web, que pretendemos que sea validad para varia plataformas y BBDD, esta inicialmente desarrollada y funcionando sobre MS sql, pero queremos ahora ponerla sobre Firebird, Posgressql, etc.

Si fuera solo para firebird, no habria problema, se rediseñarian y optimiarian las consultas necesarias, pero hibernate se supone que trabaja una capa por encima y es transaparente al SGDB que tiene por debajo.

hemos solcionado de momento el problema, quitando relaciones a las identidades de hibernate y acortando nombres de campo y de tablas.

Saldudos.

Aun no entiendo lo del tamaño de la consulta, la que acabo de enviar tiene un tamaño de más de 6mil caracteres y no me ponen ningún problema, porque no pones exactamente el error que te sale... Yo trabajo con Fb2.5 SuperCalssic... tal vez el error puede estar con el driver que da la conexión a firebird (ODBC o algo similar)

Casimiro Notevi
20-02-2012, 17:39:11
RONPABLO, el problema es que la sentencia tal y como la genera el programa mencionado "hibernate" ocupa unos 100.000 caracteres. Y el "compilador" de sentencias de firebird admite hasta 65500 caracteres.
Por lo que he entendido, puede reducirla como hemos comentado, pero quiere que sea algo que no se tenga que tocar porque necesita que funcione automáticamente con distintas bases de datos, sin tener que ajustar nada.
Es lo que me ha parecido entender.

cahp
20-02-2012, 17:41:05
Aun no entiendo lo del tamaño de la consulta, la que acabo de enviar tiene un tamaño de más de 6mil caracteres y no me ponen ningún problema, porque no pones exactamente el error que te sale... Yo trabajo con Fb2.5 SuperCalssic... tal vez el error puede estar con el driver que da la conexión a firebird (ODBC o algo similar)

Hola ronpablo,

la sentencia es de mas de 100000 caracteres, y la resctriccion de firebird como bien han comentado, es de 65000 y pico.

ya lo tenemos casi solucionado.

Gracias de todas formas.

cahp
20-02-2012, 17:42:10
Por lo que he entendido, puede reducirla como hemos comentado, pero quiere que sea algo que no se tenga que tocar porque necesita que funcione automáticamente con distintas bases de datos, sin tener que ajustar nada.
Es lo que me ha parecido entender.


Efectivamente, esa es la idea.:D:D

Y ya que estoy, si alguien esta interesado en usar firebird con hibernate para que sea transparente a la BD, que me lo indique, y estare encantado en ayudarle, ya que me estoy peleando yo,que pueda servirle a alguien mas.

Saludos.

RONPABLO
20-02-2012, 17:46:21
ups, disculpas, creo que no se leer, no vi el punto que dice que crea una consulta de más de 100.000 mil caracteres

Casimiro Notevi
20-02-2012, 18:15:38
Y ya que estoy, si alguien esta interesado en usar firebird con hibernate para que sea transparente a la BD, que me lo indique, y estare encantado en ayudarle, ya que me estoy peleando yo,que pueda servirle a alguien mas. Saludos.

Lo tendremos en cuenta :)