From fff87f22524e3b4723fb669931365f443c6cb869 Mon Sep 17 00:00:00 2001 From: Valdir Fumene Junior Date: Mon, 11 Sep 2023 10:30:00 -0300 Subject: [PATCH 01/12] IDE-1117 Update Portuguese Language for 9.2.x Signed-off-by: Valdir Fumene Junior --- .../ContainerizedMods/AzureDeployment.xml | 710 ++ .../ContainerizedMods/ConfigureValues.xml | 406 +- .../ContainerizedMods/ContainerLogging.xml | 36 + .../ContainerizedMods/CustomConfig.xml | 387 +- .../ContainerizedMods/TerraformDeployChap.xml | 628 ++ .../DataPatterns/DataPatterns-includer.xml | 76 + .../DataPatternsMods/DataPatternsBundle.xml | 611 ++ .../DataPatternsInECLWatch.xml | 197 + .../DataPatternsMods/DataPatternsIntro.xml | 63 + .../ECLLanguageReference/ECLR-includer.xml | 19 +- .../ECLR_mods/AlienData-TypeStrucSpecial.xml | 2 +- .../ECLR_mods/AlienData-TypeStruct.xml | 8 +- .../ECLR_mods/Basics-Constants.xml | 112 +- .../ECLR_mods/Basics-EnvironmentVariables.xml | 33 + .../ECLR_mods/BltInFunc-ABS.xml | 4 +- .../ECLR_mods/BltInFunc-ACOS.xml | 22 +- .../ECLR_mods/BltInFunc-AGGREGATE.xml | 54 +- .../ECLR_mods/BltInFunc-ALLNODES.xml | 21 +- .../ECLR_mods/BltInFunc-APPLY.xml | 2 +- .../ECLR_mods/BltInFunc-ASCII.xml | 63 +- .../ECLR_mods/BltInFunc-ASIN.xml | 26 +- .../ECLR_mods/BltInFunc-ASSERT.xml | 2 +- .../ECLR_mods/BltInFunc-ASTRING.xml | 5 +- .../ECLR_mods/BltInFunc-ATAN.xml | 23 +- .../ECLR_mods/BltInFunc-ATAN2.xml | 32 +- .../ECLR_mods/BltInFunc-AVE.xml | 7 +- .../ECLR_mods/BltInFunc-BUILD.xml | 575 +- .../ECLR_mods/BltInFunc-CASE.xml | 44 +- .../ECLR_mods/BltInFunc-CATCH.xml | 6 +- .../ECLR_mods/BltInFunc-CHOOSE.xml | 16 +- .../ECLR_mods/BltInFunc-CHOOSETS.xml | 4 +- .../ECLR_mods/BltInFunc-CLUSTERSIZE.xml | 13 +- .../ECLR_mods/BltInFunc-COMBINE.xml | 8 +- .../ECLR_mods/BltInFunc-CORRELATION.xml | 11 +- .../ECLR_mods/BltInFunc-COS.xml | 6 +- .../ECLR_mods/BltInFunc-COSH.xml | 11 +- .../ECLR_mods/BltInFunc-COUNT.xml | 2 +- .../ECLR_mods/BltInFunc-COVARIANCE.xml | 10 +- .../ECLR_mods/BltInFunc-CRON.xml | 2 +- .../ECLR_mods/BltInFunc-DEDUP.xml | 7 +- .../ECLR_mods/BltInFunc-DEFINE.xml | 4 +- .../ECLR_mods/BltInFunc-DENORMALIZE.xml | 79 +- .../ECLR_mods/BltInFunc-DISTRIBUTE.xml | 2 +- .../ECLR_mods/BltInFunc-DISTRIBUTED.xml | 2 +- .../ECLR_mods/BltInFunc-DISTRIBUTION.xml | 17 +- .../ECLR_mods/BltInFunc-EBCDIC.xml | 61 +- .../ECLR_mods/BltInFunc-ENTH.xml | 10 +- .../ECLR_mods/BltInFunc-ERROR.xml | 2 +- .../ECLR_mods/BltInFunc-EVALUATE.xml | 57 +- .../ECLR_mods/BltInFunc-EVENT.xml | 2 +- .../ECLR_mods/BltInFunc-EVENTEXTRA.xml | 19 +- .../ECLR_mods/BltInFunc-EVENTNAME.xml | 19 +- .../ECLR_mods/BltInFunc-EXISTS.xml | 39 +- .../ECLR_mods/BltInFunc-EXP.xml | 6 +- .../ECLR_mods/BltInFunc-FAIL.xml | 2 +- .../ECLR_mods/BltInFunc-FETCH.xml | 2 +- .../ECLR_mods/BltInFunc-FROMJSON.xml | 4 +- .../ECLR_mods/BltInFunc-FROMUNICODE.xml | 22 +- .../ECLR_mods/BltInFunc-FROMXML.xml | 4 +- .../ECLR_mods/BltInFunc-GETENV.xml | 7 +- .../ECLR_mods/BltInFunc-GLOBAL.xml | 2 +- .../ECLR_mods/BltInFunc-GRAPH.xml | 90 +- .../ECLR_mods/BltInFunc-GROUP.xml | 26 +- .../ECLR_mods/BltInFunc-HASH.xml | 21 +- .../ECLR_mods/BltInFunc-HASH64.xml | 19 +- .../ECLR_mods/BltInFunc-HASHCRC.xml | 21 +- .../ECLR_mods/BltInFunc-HASHMD5.xml | 18 +- .../ECLR_mods/BltInFunc-HAVING.xml | 27 +- .../ECLR_mods/BltInFunc-HTTPCALL.xml | 2 +- .../ECLR_mods/BltInFunc-IFF.xml | 42 +- .../ECLR_mods/BltInFunc-IMPORT.xml | 17 +- .../ECLR_mods/BltInFunc-INTFORMAT.xml | 2 +- .../ECLR_mods/BltInFunc-ISVALID.xml | 2 +- .../ECLR_mods/BltInFunc-ITERATE.xml | 26 +- .../ECLR_mods/BltInFunc-JOIN.xml | 389 +- .../ECLR_mods/BltInFunc-NOTIFY.xml | 28 +- .../ECLR_mods/BltInFunc-PARSE.xml | 70 +- .../ECLR_mods/BltInFunc-SET.xml | 17 +- .../ECLR_mods/BltInFunc-SOAPCALL.xml | 16 +- .../ECLR_mods/BltInFunc-TABLE.xml | 4 +- .../ECLR_mods/BltInFunc-TRACE.xml | 4 +- .../ECLR_mods/BltInFunc-TRIM.xml | 18 +- .../ECLR_mods/Expr-BetweenOps.xml | 7 +- .../ECLR_mods/Expr-InOps.xml | 9 +- .../ECLR_mods/Expr-RecordSetOps.xml | 2 +- .../ECLR_mods/ExpressionsandOperatos.xml | 8 +- .../ECLR_mods/ParSppt-NLPRecrd.xml | 9 +- .../ECLR_mods/ParSppt-PARSPattrn.xml | 12 +- .../ECLR_mods/RecordStructure.xml | 64 +- .../ECLR_mods/Recrd-DATASET.xml | 47 +- .../ECLR_mods/Recrd-DICTIONARY.xml | 2 +- .../ECLR_mods/Recrd-ImplicitDatasetRel.xml | 8 +- .../ECLR_mods/Recrd-Index.xml | 70 +- .../Recrd-ScopeNLogicalFilenames.xml | 14 +- .../ECLR_mods/ResrvdKywds-ALL.xml | 2 +- .../ECLR_mods/ResrvdKywds-EXCEPT.xml | 2 +- .../ECLR_mods/ResrvdKywds-EXPORT.xml | 2 +- .../ECLR_mods/ResrvdKywds-GROUP.xml | 4 +- .../ECLR_mods/ResrvdKywds-IMPORT.xml | 2 +- .../ECLR_mods/ResrvdKywds-KEYED-WILD.xml | 4 +- .../ECLR_mods/ResrvdKywds-LEFT-RIGHT.xml | 2 +- .../ECLR_mods/ResrvdKywds-LIKELY.xml | 2 +- .../ResrvdKywds-ROWS--LEFT-RIGHT.xml | 2 +- .../ECLR_mods/ResrvdKywds-SELF.xml | 2 +- .../ECLR_mods/ResrvdKywds-SHARED.xml | 2 +- .../ECLR_mods/ResrvdKywds-SKIP.xml | 2 +- .../ECLR_mods/ResrvdKywds-TrueFalse.xml | 8 +- .../ECLR_mods/SpecStruc-BeginC++.xml | 132 +- .../ECLR_mods/SpecStruc-EMBED.xml | 6 +- .../ECLR_mods/SpecStruc-FuncTion.xml | 94 +- .../ECLR_mods/SpecStruc-FuncTionMacro.xml | 4 +- .../ECLR_mods/SpecStruc-Interface.xml | 2 +- .../ECLR_mods/SpecStruc-Macro.xml | 2 +- .../ECLR_mods/SpecStruc-Module.xml | 50 +- .../ECLR_mods/SpecStruc-Transform.xml | 14 +- .../ECLR_mods/Templ-IFDEFINED.xml | 61 + .../ECLR_mods/Templ-ISDEFINED.xml | 67 + .../ECLR_mods/Templ-OPTION.xml | 39 +- .../ECLR_mods/Value-Data.xml | 6 +- .../ECLR_mods/Value-Enum.xml | 24 +- .../ECLR_mods/Value-QString.xml | 8 +- .../ECLR_mods/Value-Real.xml | 4 +- .../ECLR_mods/Value-String.xml | 8 +- .../ECLR_mods/Value-TypeCasting.xml | 18 +- .../ECLR_mods/Value-TypeOf.xml | 6 +- .../ECLR_mods/Value-UTF8.xml | 10 +- .../ECLR_mods/Value-Unicode.xml | 14 +- .../ECLR_mods/Value-VarString.xml | 6 +- .../ECLR_mods/Value-VarUnicode.xml | 11 - .../ECLProgrammersGuide/PRG_Mods/CodeSign.xml | 103 +- .../PRG_Mods/PrG_Using_Group_Function.xml | 2 +- .../PRG_Mods/PrG_control_ROXIE_queries.xml | 4 +- .../PRG_Mods/PrGit_Source_Code.xml | 573 ++ .../ECLProgrammersGuide/PrGd-Includer.xml | 8 + .../SLR-Mods/AbortDfuWorkunit.xml | 22 +- .../SLR-Mods/Copy.xml | 19 +- .../SLR-Mods/CurrentTime.xml | 3 + .../SLR-Mods/DataPatternsLibrary.xml | 739 ++ .../SLR-Mods/DeSpray.xml | 36 +- .../SLR-Mods/DeleteSuperFile.xml | 25 +- .../SLR-Mods/DfuPlusExec.xml | 47 +- .../SLR-Mods/EncodeBase64.xml | 17 +- .../SLR-Mods/Find.xml | 3 +- .../SLR-Mods/GetEspUrl.xml | 37 +- .../SLR-Mods/GetNoCommonDefault.xml | 49 + .../SLR-Mods/GetUniqueInteger.xml | 4 +- .../SLR-Mods/MonitorFile.xml | 11 +- .../SLR-Mods/MonitorLogicalFileName.xml | 11 +- .../SLR-Mods/MonthsBetween.xml | 12 +- .../SLR-Mods/RemoteDirectory.xml | 6 +- .../SLR-Mods/Replicate.xml | 34 +- .../SLR-Mods/SendEmail.xml | 63 +- .../SLR-Mods/SendEmailAttachData.xml | 30 +- .../SLR-Mods/SendEmailAttachText.xml | 32 +- .../SLR-Mods/SprayFixed.xml | 61 +- .../SLR-Mods/SprayJson.xml | 58 +- .../SLR-Mods/SprayVariable.xml | 56 +- .../SLR-Mods/SprayXML.xml | 56 +- .../SLR-Mods/WaitDfuWorkunit.xml | 32 +- .../SLR-Mods/dbglog.xml | 6 + .../SLR-includer.xml | 7 +- .../CT_Mods/CT_Comm_Line_DFU.xml | 44 +- .../HPCCClientTools/CT_Mods/CT_ECL_CLI.xml | 6097 ++++++++++++----- .../HPCCClientTools/CT_Mods/CT_ECL_IDE.xml | 54 +- .../HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml | 41 +- docs/PT_BR/HPCCClientTools/CT_Mods/ECLCC.xml | 207 +- docs/PT_BR/HPCCSpark/SparkHPCC.xml | 705 +- .../HPCCSystemAdministratorsGuide.xml | 484 +- .../SA-Mods/CassandraWUServer.xml | 518 -- docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml | 102 +- .../Inst-Mods/UnityLauncher.xml | 110 - .../Inst-Mods/UserSecurityMaint.xml | 123 + .../Installing_and_RunningTheHPCCPlatform.xml | 104 +- .../RoxieRefMods/directAccessToRoxie.xml | 65 + docs/PT_BR/images/CNTR-DestroyComplete.jpg | Bin 0 -> 97359 bytes docs/PT_BR/images/CNTR-TerraVersion.jpg | Bin 0 -> 42960 bytes .../images/CNTR_kubctlGetPodsRunning.jpg | Bin 0 -> 46076 bytes docs/PT_BR/images/CT_statusbar.jpg | Bin 0 -> 42236 bytes docs/PT_BR/images/CT_statusbarConfig.jpg | Bin 0 -> 33061 bytes docs/PT_BR/images/DP001.jpg | Bin 0 -> 16809 bytes docs/PT_BR/images/DP002.jpg | Bin 0 -> 30418 bytes docs/PT_BR/images/DP003.jpg | Bin 0 -> 41870 bytes docs/PT_BR/images/DP004.jpg | Bin 0 -> 8083 bytes docs/PT_BR/images/DP005.jpg | Bin 0 -> 46254 bytes docs/PT_BR/images/DP006.jpg | Bin 0 -> 11259 bytes docs/PT_BR/images/DP007.jpg | Bin 0 -> 23812 bytes docs/PT_BR/images/DP009.jpg | Bin 0 -> 42948 bytes docs/PT_BR/images/ECLWA203-1.jpg | Bin 0 -> 54061 bytes docs/PT_BR/images/ECLWA427.jpg | Bin 0 -> 3564 bytes docs/PT_BR/images/LDAP_0058-1.jpg | Bin 0 -> 68087 bytes docs/PT_BR/images/LDAP_0058-2.jpg | Bin 0 -> 73771 bytes docs/PT_BR/images/LDAP_0058-3.jpg | Bin 0 -> 63389 bytes docs/PT_BR/images/LDAP_0058-4.jpg | Bin 0 -> 50067 bytes docs/PT_BR/images/LDAP_0059-1.jpg | Bin 0 -> 103988 bytes docs/PT_BR/images/RDDE_RoxieLogging.jpg | Bin 0 -> 37586 bytes docs/PT_BR/images/SCOST_img3_1.jpg | Bin 0 -> 40665 bytes docs/PT_BR/images/WhatYouNeed.jpg | Bin 0 -> 61987 bytes 197 files changed, 12449 insertions(+), 4730 deletions(-) create mode 100644 docs/PT_BR/ContainerizedHPCC/ContainerizedMods/AzureDeployment.xml create mode 100644 docs/PT_BR/ContainerizedHPCC/ContainerizedMods/TerraformDeployChap.xml create mode 100644 docs/PT_BR/DataPatterns/DataPatterns-includer.xml create mode 100644 docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsBundle.xml create mode 100644 docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsInECLWatch.xml create mode 100644 docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsIntro.xml create mode 100644 docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-EnvironmentVariables.xml create mode 100644 docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-IFDEFINED.xml create mode 100644 docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-ISDEFINED.xml create mode 100644 docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrGit_Source_Code.xml create mode 100644 docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DataPatternsLibrary.xml create mode 100644 docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetNoCommonDefault.xml delete mode 100644 docs/PT_BR/HPCCSystemAdmin/SA-Mods/CassandraWUServer.xml delete mode 100644 docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UnityLauncher.xml create mode 100644 docs/PT_BR/images/CNTR-DestroyComplete.jpg create mode 100644 docs/PT_BR/images/CNTR-TerraVersion.jpg create mode 100644 docs/PT_BR/images/CNTR_kubctlGetPodsRunning.jpg create mode 100644 docs/PT_BR/images/CT_statusbar.jpg create mode 100644 docs/PT_BR/images/CT_statusbarConfig.jpg create mode 100644 docs/PT_BR/images/DP001.jpg create mode 100644 docs/PT_BR/images/DP002.jpg create mode 100644 docs/PT_BR/images/DP003.jpg create mode 100644 docs/PT_BR/images/DP004.jpg create mode 100644 docs/PT_BR/images/DP005.jpg create mode 100644 docs/PT_BR/images/DP006.jpg create mode 100644 docs/PT_BR/images/DP007.jpg create mode 100644 docs/PT_BR/images/DP009.jpg create mode 100644 docs/PT_BR/images/ECLWA203-1.jpg create mode 100644 docs/PT_BR/images/ECLWA427.jpg create mode 100644 docs/PT_BR/images/LDAP_0058-1.jpg create mode 100644 docs/PT_BR/images/LDAP_0058-2.jpg create mode 100644 docs/PT_BR/images/LDAP_0058-3.jpg create mode 100644 docs/PT_BR/images/LDAP_0058-4.jpg create mode 100644 docs/PT_BR/images/LDAP_0059-1.jpg create mode 100644 docs/PT_BR/images/RDDE_RoxieLogging.jpg create mode 100644 docs/PT_BR/images/SCOST_img3_1.jpg create mode 100644 docs/PT_BR/images/WhatYouNeed.jpg diff --git a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/AzureDeployment.xml b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/AzureDeployment.xml new file mode 100644 index 00000000000..70afb389594 --- /dev/null +++ b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/AzureDeployment.xml @@ -0,0 +1,710 @@ + + + + Implantação do Azure (Desenvolvimento, Teste e Produção) + + Esta seção deve se aplicar à maioria das instâncias do Azure. Pode ser + necessário ajustar alguns comandos ou instruções de acordo com os requisitos + da sua instância. + + + Utilizando Azure + + Embora existam muitas maneiras de interagir com o Azure, esta seção + usará a interface de linha de comando do shell de nuvem do Azure. + + A principal vantagem de usar o cloud shell é que ele também terá os + outros pré-requisitos instalados para você. + + + Pré-Requisitos + + Para implantar uma instância de plataforma em contêiner do HPCC + Systems no Azure, você deve ter: + + + + Um computador que suporta Linux, MacOS, ou Windows. + + + + Um navegador, como Chrome ou Firefox. + + + + Uma conta do Azure com permissões, direitos e credenciais + suficientes. Para obtê-lo, acesse www.azure.com ou fale com seu + gerente se acreditar que seu empregador pode ter uma conta + corporativa. + + + + Um editor de texto. Você pode usar um dos editores disponíveis + no shell de nuvem do Azure (code, vi ou nano) ou qualquer outro + editor de texto de sua preferência. + + + + No mínimo, usando o Helm 3.5 de 64 bits ou superior - mesmo se + estiver usando o shell de nuvem do Azure. + + + + Supondo que você tenha uma conta do Azure com créditos adequados, + você pode usar o shell baseado em navegador do Azure, conhecido como + shell de nuvem do Azure, para implantar e gerenciar seus recursos. O + shell de nuvem do Azure vem com ferramentas pré-instaladas, como Helm, + Kubectl, Python, Terraform, etc. + + https://portal.azure.com/ + + Se esta for a primeira vez que você acessa o shell de nuvem, o + Azure provavelmente o notificará sobre a necessidade de armazenamento + para salvar as configurações e os arquivos da máquina virtual. + + + + Clique através dos prompts para criar sua conta de + armazenamento. + + + + Agora você deve ter um shell de nuvem do Azure que está pronto + para uso. Agora você pode prosseguir para a próxima seção. + + + Ferramentas de Terceiros + + Caso decida não usar o shell de nuvem do Azure, você precisará + instalar e configurar a CLI do Azure em seu computador host para + implantar e gerenciar os recursos do Azure. Além disso, você também + precisará instalar o Helm e o Kubectl para gerenciar seus pacotes e + clusters do Kubernetes, respectivamente. + + + + Azure Client Interface (CLI) + + + + Kubectl + + + + Helm 3.5 ou maior + + Todas as ferramentas de terceiros listadas acima + devem usar a arquitetura de 64 bits. + + A documentação e as instruções sobre como instalar e configurar + as ferramentas de terceiros estão disponíveis nos respectivos sites + dos respectivos fornecedores. + + + + + Azure Resource Group + + Um resource group do Azure é semelhante a uma pasta onde um grupo + de recursos relacionados é armazenado. Geralmente, você deve usar apenas + um resource group por implantação. Por exemplo, implantar dois clusters + Kubernetes em um resource group pode causar confusão e dificuldades de + gerenciamento. A menos que você ou alguém em sua organização já tenha + criado um resource group e especificado para trabalhar nesse resource + group pré-existente, você precisará criar um. + + Para criar um novo resource group, você deve escolher um nome e um + local do Azure. Além disso, você pode optar por usar tags para facilitar + o gerenciamento de seus resource groups. Alguns dos detalhes sobre isso + podem estar sujeitos a você ou às assinaturas, cotas, restrições ou + políticas de sua organização. Certifique-se de ter uma assinatura do + Azure configurada corretamente com um nível de acesso e créditos + suficientes para uma implantação bem-sucedida. + + Execute o seguinte comando para criar um novo resource group + chamado rg-hpcc no Azure: + + az group create --name rg-hpcc --location eastus + + A seguinte mensagem indica que o grupo de recursos foi criado com + sucesso. + + { + "id": "/subscriptions/<my_subscription_id>/resourceGroups/rsg-hpcc", + "location": "eastus", + "managedBy": null, + "name": "rg-hpcc", + "properties": { + "provisioningState": "Succeeded" + }, + + "tags": null, + "type": "Microsoft.Resources/resourceGroups" + } + + Observe que a lista de regiões disponíveis para você pode variar + de acordo com as políticas e/ou localização de sua empresa. + + + Cluster de serviço do Azure Kubernetes + + Em seguida, criaremos um cluster do Azure Kubernetes Service + (AKS). É um serviço fornecido pelo Azure que oferece Kubernetes sem + servidor, que promove entrega rápida, dimensionamento etc. + + Você pode escolher qualquer nome para seu cluster Kubernetes. + Nós utilizaremos aks-hpcc. Para criar um cluster Kubernetes, execute o + seguinte comando: + + az aks create --resource-group rg-hpcc --name aks-hpcc --location <location> + + + + NOTA + + + Existem alguns paramêtros opcionais, incluindo --node-vm-size e --node-count. O tamanho do nó refere-se + às especificações da VM de sua escolha, enquanto a contagem de + nós refere-se ao número de VMs que você deseja usar. Para mais + sobre tamanho de node, por favor visite https://docs.microsoft.com/en-us/azure/virtual-machines/sizes + + + + + Esta etapa pode levar alguns minutos. O tempo que leva para o + Azure criar e provisionar os recursos solicitados pode variar. + Enquanto espera pela conclusão da implantação, você pode visualizar o + progresso no portal do Azure. Para visualizar o progresso, abra outra + guia do navegador e digite:2 + + https://portal.azure.com/#blade/HubsExtension/BrowseAll + + + + Azure Node Pools + + O Azure Kubernetes Service (AKS) cria automaticamente um pool de + nós. É um pool de nós do sistema, por padrão. Existem dois tipos de + pool de nós: pools de nós do sistema e + pools de nós do usuário. O pool de nós do sistema + é reservado para os principais serviços e cargas de trabalho do + Kubernetes, como kubelets, kube-proxies etc. Um pool de nós do usuário + deve ser usado para hospedar seus serviços de aplicativos e cargas de + trabalho. Pools de nós adicionais podem ser adicionados após a + implantação do cluster AKS. + + Para seguir as recomendações para reservar o pool de nós do + sistema apenas para os principais serviços AKS e cargas de trabalho. + Você precisará usar uma mancha de nó no pool de nós do sistema + recém-criado. Como você não pode adicionar taints a nenhum pool de nós + pré-existente, troque o pool de nós do sistema padrão pelo + recém-criado. + + Para fazer isso, digite o seguinte comando (todos em uma linha, + se possível, e remova os conectores "\", pois eles são incluídos aqui + apenas para que o código caiba em uma única página): + + az aks nodepool add \ +--name sysnodepool \ +--cluster-name aks-hpcc \ +--resource-group rg-hpcc \ +--mode System \ +--enable-cluster-autoscaler \ +--node-count=2 \ +--min-count=1 \ +--max-count=2 \ +--node-vm-size \ +--node-taints CriticalAddonsOnly=true:NoSchedule + + + Exclua o pool padrão criado automaticamente, que chamamos de + "nodepool1" como exemplo, o nome real pode variar. + + Mais uma vez, digite o comando em uma única linha, (sem + conectores "\" se possível). + + az aks nodepool delete \ +--name nodepool1 \ +--cluster-name aks-hpcc \ +--resource-group rg-hpcc + + + Recomendamos ter pelo menos um pool de nós de usuário. + + Em seguida, adicione um pool de nós de + usuário que agendará os pods do HPCC Systems. Lembre-se + também de inserir o comando em uma única linha, sem os conectores, se + possível: + + az aks nodepool add \ +--name usrnodepool1 \ +--cluster-name aks-hpcc \ +--resource-group rg-hpcc \ +--enable-cluster-autoscaler \ +--node-count=2 \ +--min-count=1 \ +--max-count=2 \ +--mode User + + + Para maiores informações sobre preços e modelos de Azure virtual + machine, por favor visite: https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/ + + + + Configurando Credenciais + + Para gerenciar seu cluster AKS de sua máquina host e usar o + kubectl, você precisa se autenticar no cluster. + Além disso, isso também permitirá que você implante sua instância HPCC + Systems usando o Helm. Para configurar as credenciais do cliente + Kubernetes, insira o seguinte comando: + + az aks get-credentials --resource-group rg-hpcc --name aks-hpcc --admin + + + + + Instale o charts Helm + + Esta seção demonstrará como buscar, modificar e implantar os + charts do HPCC Systems. Primeiro, precisamos acessar o repositório HPCC + Systems. + + Para adicionar, ou atualizar, caso já tenha instalado, o + repositório do chart do HPCC Systems: + + helm repo add hpcc https://hpcc-systems.github.io/helm-chart/ + + Para atualizar o repositório: + + helm repo update + + Você deve sempre atualizar o repositório antes de implantar. Isso + permite que você obtenha as versões mais recentes das dependências do + chart. + + + Instalando os componente do HPCC Systems + + Para que uma instalação básica seja bem-sucedida, ela deve ter + algum tipo de armazenamento ativado. As etapas a seguir criarão + armazenamento efêmero usando o utilitário + azstorage que permitirá que o HPCC Systems sejam + iniciados e executados, mas não persistirão. Para fazer isso, + implantaremos o chart hpcc-azurefile que + configurará o armazenamento efêmero do Azure para a implantação do + HPCC Systems. + + Para instalar o chart hpcc-azurefile: + + helm install azstorage hpcc/hpcc-azurefile + + O objetivo aqui é obter os valores padrão do chart + azstorage e criar um arquivo de personalização + que passará os valores apropriados para a instância do HPCC + Systems. + + Copie a saída do comando helm install que você emitiu na etapa + anterior, do parâmetro storage: até o + final do arquivo e salve o arquivo como + mystorage.yaml. O arquivo + mystorage.yaml deve ser muito semelhante ao + seguinte: + + storage: + planes: + - name: dali + pvc: dali-azstorage-hpcc-azurefile-pvc + prefix: "/var/lib/HPCCSystems/dalistorage" + category: dali + - name: dll + pvc: dll-azstorage-hpcc-azurefile-pvc + prefix: "/var/lib/HPCCSystems/queries" + category: dll + - name: sasha + pvc: sasha-azstorage-hpcc-azurefile-pvc + prefix: "/var/lib/HPCCSystems/sasha" + category: sasha + - name: data + pvc: data-azstorage-hpcc-azurefile-pvc + prefix: "/var/lib/HPCCSystems/hpcc-data" + category: data + - name: mydropzone + pvc: mydropzone-azstorage-hpcc-azurefile-pvc + prefix: "/var/lib/HPCCSystems/dropzone" + category: lz + + +sasha: + wu-archiver: + plane: sasha + dfuwu-archiver: + plane: sasha + + + + + Nota: + + + A indentação, a sintaxe e os caracteres são muito + críticos. Certifique-se de que eles correspondam exatamente ao + exemplo acima. Um único espaço extra neste arquivo pode causar + dores de cabeça desnecessárias. + + + Agora podemos usar este arquivo + mystorage.yaml para passar esses valores quando + iniciarmos nosso cluster HPCC Systems. + + + + Habilitar acesso ao Serviços ESP + + Para acessar sua instância de nuvem HPCC Systems, você deve + habilitar a visibilidade dos serviços ESP. Conforme entregues, os + serviços ESP são privados com visibilidade apenas local. Para permitir + a visibilidade global, instalaremos o cluster HPCC Systems usando um + arquivo de personalização para substituir o dicionário ESP. Há mais + informações sobre como personalizar sua implantação na documentação de + Containerized HPCC Systems. + + O objetivo aqui é obter os valores do chart entregue e criar um + arquivo de personalização que passará os valores que você deseja para + a instância do HPCC Systems. Para obter os valores desse gráfico, + digite o seguinte comando: + + helm show values hpcc/hpcc > defaultvalues.yaml + + + + + + + + + + + + + + IMPORTANTE: A + indentação, a sintaxe, os caracteres, bem como cada par de + key-value são muito críticos. Certifique-se de que eles + correspondem exatamente ao exemplo abaixo. Um único espaço + extra ou caractere ausente neste arquivo pode causar dores + de cabeça desnecessárias. + + + + + + Utilizando o editor de texto, abra o arquivo + defaultvalues.yaml e copie a parte do esp: arquivo, conforme a seguir: + + esp: +- name: eclwatch + ## Pre-configured esp applications include eclwatch, eclservices, and eclqueries + application: eclwatch + auth: none + replicas: 1 +# Add remote clients to generated client certificates and make the ESP require that one of +r to connect +# When setting up remote clients make sure that certificates.issuers.remote.enabled is set +# remoteClients: +# - name: myclient +# organization: mycompany + service: + ## port can be used to change the local port used by the pod. If omitted, the default por + port: 8888 + ## servicePort controls the port that this service will be exposed on, either internally + servicePort: 8010 + ## Specify visibility: local (or global) if you want the service available from outside +externally, while eclservices is designed for internal use. + visibility: local + ## Annotations can be specified on a service - for example to specify provider-specific i +-balancer-internal-subnet + #annotations: + # service.beta.kubernetes.io/azure-load-balancer-internal-subnet: "mysubnet" + # The service.annotations prefixed with hpcc.eclwatch.io should not be declared here. T + # in other services in order to be exposed in the ECLWatch interface. Similar function c + # applications. For other applications, the "eclwatch" inside the service.annotations sh + # their application names. + # hpcc.eclwatch.io/enabled: "true" + # hpcc.eclwatch.io/description: "some description" + ## You can also specify labels on a service + #labels: + # mylabel: "3" + ## Links specify the web links for a service. The web links may be shown on ECLWatch. + #links: + #- name: linkname + # description: "some description" + # url: "http://abc.com/def?g=1" + ## CIDRS allowed to access this service. + #loadBalancerSourceRanges: [1.2.3.4/32, 5.6.7.8/32] + #resources: + # cpu: "1" + # memory: "2G" +- name: eclservices + application: eclservices + auth: none + replicas: 1 + service: + servicePort: 8010 + visibility: cluster + #resources: + # cpu: "250m" + # memory: "1G" +- name: eclqueries + application: eclqueries + auth: none + replicas: 1 + service: + visibility: local + servicePort: 8002 + #annotations: + # hpcc.eclwatch.io/enabled: "true" + # hpcc.eclwatch.io/description: "Roxie Test page" + # hpcc.eclwatch.io/port: "8002" + #resources: + # cpu: "250m" + # memory: "1G" +- name: esdl-sandbox + application: esdl-sandbox + auth: none + replicas: 1 + service: + visibility: local + servicePort: 8899 + #resources: + # cpu: "250m" + # memory: "1G" +- name: sql2ecl + application: sql2ecl + auth: none + replicas: 1 +# remoteClients: +# - name: sqlclient111 + service: + visibility: local + servicePort: 8510 + #domain: hpccsql.com + #resources: + # cpu: "250m" + # memory: "1G" +- name: dfs + application: dfs + auth: none + replicas: 1 + service: + visibility: local + servicePort: 8520 + #resources: + # cpu: "250m" + # memory: "1G" + + + Salve essa parte do ESP em um novo arquivo chamado + myesp.yaml. Você precisa modificar esse arquivo e + usá-lo para substituir esses valores padrão em sua implantação. + + Para acessar os serviços HPCC Systems, você deve substituir + essas configurações padrão para torná-las visíveis. Agora vamos + definir a visibilidade para eclwatch e eclqueries de local para global + como no exemplo abaixo. Edite o arquivo + myesp.yaml e altere as duas seções destacadas nos + exemplos de código abaixo: + + esp: +- name: eclwatch + ## Pre-configured esp applications include eclwatch, eclservices, and eclqueries + application: eclwatch + auth: none + replicas: 1 + service: + ## port can be used to change the local port used by the pod. If omitted, the default por + port: 8888 + ## servicePort controls the port that thi cesps service will be exposed on, either intern + servicePort: 8010 + ## Specify visibility: local (or global) if you want the service available from outside t +externally, while eclservices is designed for internal use. + visibility: global + ## Annotations can be specified on a service - for example to specify provider-specific i + + + + - name: eclqueries + application: eclqueries + auth: none + replicas: 1 + service: + visibility: global + servicePort: 8002 + + Salve o arquivo customizado myesp.yaml + modificado. + + Agora, podemos usar o arquivo myesp.yaml + para informar os valores quando iniciarmos nosso cluster HPCC + Systems. + + + + Instalar um chart customizado do HPCC Systems + + Esta seção instalará o chart HPCC Systems onde fornecemos os + arquivos de customização do myesp.yaml e + mystorage.yaml criados na seção anterior. Você + deve criar ou adicionar suas próprias personalizações adicionais em um + desses ou até mesmo em outro arquivo yaml de + personalização específico para seus requisitos. A criação e o uso de + versões personalizadas do arquivo values.yaml do + HPCC Systems são descritos na seção Customizing + Configurations do documento Containerized HPCC + Systems. Para instalar seus charts personalizados do HPCC + Systems: + + helm install myhpcccluster hpcc/hpcc -f myesp.yaml -f mystorage.yaml + + Onde a opção -f força o sistema a mesclar os valores informados + nos arquivos myesp.yaml e + mystorage.yaml. + + + + Nota: + + + Você pode também usar a opção --values como substituto para -f + + + + + Se tudo estiver certo, seu output será similar ao exemplo a + seguir: + + NAME: myhpcccluster +LAST DEPLOYED: Wed Dec 15 09:41:38 2021 +NAMESPACE: default +STATUS: deployed +REVISION: 1 +TEST SUITE: None + + + Neste ponto, o Kubernetes deve começar a provisionar os pods do + HPCC Systems. Para verificar o status, execute: + + kubectl get pods + + + + Nota: + + + Se esta for a primeira vez que a instalação do helm é + executada, levará algum tempo para que os pods cheguem ao estado + Running, pois o Azure precisará extrair as imagens do contêiner + do Docker. Depois que todos os pods estiverem em execução, o + HPCC Systems Cluster estará pronto para ser usado. + + + + + + + + + + Acessando o ECLWatch + + Para acessar o ECLWatch, é necessário um IP externo para o serviço + ESP executar o ECLWatch. Se você implantou seu cluster com êxito com as + configurações de visibilidade adequadas, ele será listado como um + serviço eclwatch. O endereço IP pode ser obtido + executando o seguinte comando: + + kubectl get svc + + Seu output deve ser similiar ao exemplo a seguir: + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +eclservices ClusterIP 10.0.44.11 <none> 8010/TCP 11m +eclwatch LoadBalancer 10.0.21.16 12.87.156.228 8010:30190/TCP 11m +kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4h28m +mydali ClusterIP 10.0.195.229 <none> 7070/TCP 11m + + Use o endereço de IP-EXTERNO listado para o serviço ECLWatch. Abra + o navegador e digite http://<ip-externo>:8010/. Por exemplo, + digite http://12.87.156.228:8010. Se tudo funcionar conforme esperado, a + página inicial do ECLWatch será exibida. + + + + Desinstalando seu Cluster + + Quando terminar de usar o cluster HPCC Systems, você poderá + destruí-lo para evitar cobranças por recursos não utilizados. Uma conta + de armazenamento é recomendada para salvar seus dados HPCC Systems fora + do Serviço Azure Kubernetes. Isso permite que você destrua o serviço sem + perder seus dados. + + As várias opções e estratégias de armazenamento são discutidas em + outro lugar, além da documentação do HPCC Systems. + + + Parando seu cluster HPCC Systems + + Isso simplesmente interromperá sua instância do HPCC Systems. Se + você estiver excluindo o grupo de recursos, conforme detalhado na + seção a seguir, isso destruirá tudo nele, incluindo o cluster HPCC + Systems. A desinstalação da implantação do HPCC Systems nesse caso é + redundante. Você ainda será cobrado pelo AKS. Se, por qualquer motivo, + você não puder destruir o Resource Group, siga as etapas nesta seção + para desligar o cluster HPCC Systems. + + Para desligar seu cluster HPCC Systems, você deve utilizar o + comando de desistalação do helm. + + Utilizando o Azure cloud shell, digita: + + helm list + + Digite o comando de desinstalação do helm usando o nome do + cluster como argumento, por exemplo: + + helm uninstall myhpcccluster + + Isto irá remover o cluster HPCC Systems <myhpcccluster> + que você implantou previamente. + + + + Removendo o Resource Group + + A remoção do Resource Group destruirá irreversivelmente + quaisquer pods, clusters, conteúdos ou qualquer outro trabalho + armazenado nele. Considere cuidadosamente essas ações antes de + remover. Uma vez removido, não pode ser desfeito. + + Para remover todo o grupo de recursos + rg-hpcc que criamos anteriormente e todo o seu + conteúdo, envie o seguinte comando: + + az group delete --name rg-hpcc + + Ele perguntará se você tem certeza de que deseja fazer isso e, + se confirmar, excluirá todo o Resource Group. + + + + diff --git a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml index d2625fca6e0..a73aa50e7b5 100644 --- a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml +++ b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml @@ -21,24 +21,24 @@ comunidade, aproveitando os recursos do contêiner sem sacrificar o desempenho. - Toda a configuração do HPCC Systems no espaço do contêiner é - governada por um único arquivo, um arquivo - values.yaml e seu arquivo de esquema - associado. + Toda a configuração do HPCC Systems no contêiner é gerida por um + único arquivo, um arquivo values.yaml e associado ao + schema (values-schema.json) file. O <emphasis>values.yaml</emphasis> e como é utilizado - O arquivo values.yaml são os valores de - configuração fornecidos para um chart do Helm. O arquivo - values.yaml é usado pelo chart do Helm para - controlar como o HPCC Systems é implantado na nuvem. Esse arquivo de - valores é usado para configurar e obter uma instância do HPCC Systems em - execução no Kubernetes. O arquivo values.yaml - define tudo o que acontece para configurar e/ou definir seu - sistema para uma implantação em contêiner. Você deve usar o arquivo de - valores fornecido como base para modelar as personalizações específicas - para sua implantação de acordo com seus requisitos. + O arquivo de estoque values.yaml, fornecido + no repositório HPCC Systems, são os valores de configuração fornecidos + para o Helm chart "hpcc". O arquivo values.yaml é + usado pelo Helm chart para controlar como HPCC systems é implantado na + nuvem. Este arquivo values.yaml é um único arquivo + usado para configurar e obter uma instância do HPCC Systems em execução + no Kubernetes. O arquivo values.yaml define tudo o + que acontece para configurar e/ou definir seu sistema para implantação + em contêiner. Você deve usar o arquivo de valores fornecido como base + para personalizações da modelagem do seus requisitos para sua + implantação específica. O arquivo values.yaml do HPCC Systems pode ser encontrado no repositório github do HPCC Systems. Para usar o chart @@ -122,7 +122,7 @@ - Componentes HPCC Systems no Arquivo + <title>Componentes HPCC Systems e o Arquivo <emphasis>values.yaml</emphasis> Os chart do Helm do HPCC Systems são enviados com valores de @@ -186,7 +186,7 @@ pode ter várias definições de "roxieservice". (ver esquema). - + Dali Ao configurar o Dali, que também possui uma seção de recursos, @@ -202,8 +202,8 @@ Componentes: dafilesvrs, dfuserver Os componentes do HPCC Systems de dafilesvrs, eclccservers, - dfuserver, são declarados como listas no yaml, assim como o ECL - Agent. + dfuserver, são declarados como listas no arquivo YAML, assim como o + ECL Agent. Considere o dfuserver que está nos values.yaml entregues do HPCC Systems @@ -893,42 +893,48 @@ Secrets A seção Secrets contém um conjunto de categorias, cada uma - contendo uma lista de secrets. A seção Secrets é onde obter - informações no sistema se você não as quiser na fonte. Como código - incorporado, você pode definir isso nas seções de sinal de código. Se - você tiver informações que não deseja que sejam públicas, mas precisa - executá-las, poderá usar segredos. + contendo uma lista de secrets. A seção Secrects é o local onde é + possível obter informações no sistema, caso não as queira na fonte. + Tal como código embarcado, você pode definir isso nas seções de sign + do código. Se você tiver informações que não deseja publicar, mas + precisa executá-las, poderá usar secrets. Existe uma categoria chamada + "eclUser", onde você colocaria o conteúdo que deseja ler diretamente + do código ECL. Outras categorias de secrects, incluindo a categoria + "ecl", são lidas internamente pelos componentes do sistema e não + expostas diretamente ao código ECL. Vaults - Vaults é outra maneira de fazer Secrets. A seção de vaults - espelha a seção secrets, mas aproveita o HashiCorp Vault para o - armazenamento de secrets. Há uma categoria adicional para vaults - chamada "ecl-user". A intenção dos secrets do vaults do usuário ecl é - ser legível diretamente do código ECL. Outras categorias vaults são - lidas internamente pelos componentes do sistema e não expostas - diretamente ao código ECL. + Vaults é outra maneira de esconder informações. A seção de + Vaults espelha a seção Secrects, mas aproveita + HashiCorpVault para o armazenamento dos secrects. + Existe uma categoria para vaults chamada "eclUser". A intenção da + categoria de vault eclUser é ser legível diretamente do código ECL. + Adicione apenas configurações de vault à categoria "eclUser" que você + deseja que os usuários ECL possam acessar. Outras categorias de vault, + incluindo a categoria "ecl", são lidas internamente pelos componentes + do sistema e não expostas diretamente ao código ECL. - Visibilidades + Visibilities - A seção de visibilidades pode ser usada para definir rótulos, + A seção Visibilities pode ser usada para definir rótulos, anotações e tipos de serviço para qualquer serviço com a visibilidade especificada. - Réplicas e Resources + Replicas e Resources Outros valores dignos de nota nos charts que têm relação com a instalação e configuração do HPCC Systems. - Réplicas + Replicas replicas: define quantos nós de réplica surgem, quantos pods são executados para equilibrar uma carga. Para ilustrar, se você tiver um @@ -937,7 +943,7 @@ - Recursos + Resources A maioria dos componentes tem uma seção de recursos que define quantos recursos são atribuídos a esse componente. Nos arquivos de @@ -965,7 +971,7 @@ - Taints, Tolerations, e placements + Taints, Tolerations e Placements Esta é uma consideração importante para sistemas em contêineres. Taints e Tolerations são tipos de restrições de nó do Kubernetes @@ -1055,40 +1061,74 @@ sejam colocados nos nós apropriados. + + + Environment Values + + Você pode definir variáveis de ambiente em um arquivo YAML. Os + valores do ambiente são definidos na parte global.env + do arquivo HPCC Systems values.yaml fornecido. Esses + valores são especificados como uma lista de pares de valor de nome + conforme ilustrado abaixo. + + global: + env: + - name: SMTPserver + value: mysmtpserver + + A seção global.env do arquivo values.yaml fornecido adiciona + variáveis de ambiente padrão para todos os componentes. Você também + pode especificar variáveis de ambiente para os componentes + individuais. Consulte o schema para definir esse valor para + componentes individuais. + + Para adicionar valores de ambiente, você pode inseri-los em seu + arquivo YAML de configuração de personalização ao implantar seu HPCC + Systems em contêineres. + - Mais Helm e Yaml - - Esta seção destina-se a fornecer algumas informações úteis para - começar com uma implantação em contêiner. Existem vários recursos para - usar arquivos Kubernetes, Helm e Yaml. Anteriormente, abordamos o arquivo - values.yaml e o arquivo values-schema.json. Esta - seção expande alguns desses conceitos e como eles podem ser aplicados ao - usar a versão em contêiner da plataforma HPCC Systems. Para obter mais - informações sobre como usar arquivos Kubernetes, Helm ou YAML, ou para - implantações de nuvem ou contêiner, consulte a respectiva + Básico sobre Helm e Yaml + + Esta seção destina-se a fornecer algumas informações básicas para + ajudá-lo a começar a implantação em contêineres do HPCC Systems. Existem + vários recursos disponíveis para aprender sobre arquivos Kubernetes, Helm + e YAML. Para obter mais informações sobre como usar essas ferramentas ou + para implantações em nuvem ou contêiner, consulte a respectiva documentação. + In the previous section, we touched on the + values.yaml file and the + values-schema.json file. This section expands on some + of those concepts and how they might be applied when using the + containerized version of the HPCC Systems platform. + + Anteriormente, abordamos o arquivo values.yaml + e o arquivo values-schema.json. Esta seção expande alguns desses conceitos + e como eles podem ser aplicados ao usar a versão em contêiner da + plataforma HPCC Systems. + Estrutura do arquivo <emphasis>values.yaml</emphasis> - O arquivo values.yaml é um arquivo yaml. Yaml - é uma linguagem de serialização de dados frequentemente usada como - formato para arquivos de configuração. A construção que compõe a maior - parte de um arquivo yaml é o par chave-valor, às vezes chamado de hash - ou dicionário. A construção do par chave-valor consiste em uma chave que - aponta para algum(s) valor(es). Os valores podem ser strings, números, - booleanos, inteiros, arrays ou dicionários e listas. Esses valores são - definidos pelo esquema. + O arquivo values.yaml é um arquivo YAML que é + um formato frequentemente usado para arquivos de configuração. A + construção que compõe a maior parte de um arquivo YAML é o par + key-value, às vezes chamado de dicionário. A construção do par key-value + consiste em uma chave que aponta para alguns valores. Esses valores são + definidos pelo schema. - Em arquivos yaml, o recuo é usado para representar a estrutura e o - aninhamento do documento. Espaços à esquerda são significativos e - tabulações não são permitidas. + Nesses arquivos de configuração, o recuo usado para representar o + relacionamento da estrutura do documento é muito importante. Os espaços + iniciais são significativos e as tabulações não são permitidas. + + Arquivos YAML são criados principalmente para dois tipos de + elementos: dictionários e listas. - Dicionário + Dicitionary Dicionários são coleções de mapeamentos de valores-chave. Todas as chaves diferenciam maiúsculas de minúsculas e, como mencionamos @@ -1096,8 +1136,7 @@ seguidas por dois pontos (:) e um espaço. Os dicionários também podem ser aninhados. - Dictionary is a key: value, followed by another key: value:, for - example: + Por examplo: logging: detail: 80 @@ -1112,12 +1151,9 @@ helm install myhpcc hpcc/hpcc -f myoverrides.yaml - Observe que você pode passar quantos arquivos yaml desejar, eles - serão mesclados na ordem em que aparecem na linha de comando. - Quaisquer valores pré-existentes em um dicionário que não sejam substituídos continuarão presentes no resultado mesclado. No entanto, - você pode excluir o conteúdo de um dicionário definindo-o como + você pode sobrepor o conteúdo de um dicionário definindo-o como nulo. @@ -1125,10 +1161,10 @@ Listas Listas são grupos de elementos começando no mesmo nível de recuo - começando com um - (um traço e um espaço). Cada elemento da lista é - recuado no mesmo nível e começa com um traço e um espaço. As listas + começando com um - (um hifen e um espaço). Cada elemento da lista é + recuado no mesmo nível e começa com um hífen e um espaço. As listas também podem ser aninhadas e podem ser listas de dicionários, que por - sua vez também podem ter propriedades de lista. + sua vez também podem ter propriedades de uma lista. Um exemplo de uma lista de dicionários, com placement.tolerations como uma lista aninhada.: @@ -1140,87 +1176,42 @@ - key: "kubernetes.azure.com/scalesetpriority" - Uma chave é denotada usando um sinal de menos, que é um item de - entrada na lista, que é um dicionário com atributos aninhados. Em - seguida, o próximo sinal de menos (no mesmo nível de recuo) é a - próxima entrada nessa lista. + A entrada da lista aqui é indicada usando o hífen, que é um item + de entrada na lista, que é um dicionário com atributos aninhados. Em + seguida, o próximo hífen (no mesmo nível de indentação) é a próxima + entrada nessa lista. Uma lista pode ser uma lista de elementos de + valor simples ou os próprios elementos podem ser listas ou + dicionários. - - - Global + + Seções do arquivo Values.yaml - A primeira seção do arquivo values.yaml - descreve os valores globais. O global.image.root é uma string que indica - qual versão extrair. Global se aplica geralmente a tudo. + Primeira seção do arquivo values.yaml + descreve valores globais. Global normalmente se aplica a tudo. - # Default values for hpcc. + # Default values for hpcc. global: # Settings in the global section apply to all HPCC components in all subcharts - image: - ## It is recommended to name a specific version rather than latest, for any non-trivial - ## For best results, the helm chart version and platform version should match - default if version - ## not specified. Do not override without good reason as undefined behavior may result. - ## version: x.y.z - root: "hpccsystems" # change this to pull from somewhere other than DockerHub hpccsystems - pullPolicy: IfNotPresent - - # logging sets the default logging information for all components. Can be overridden locally - logging: - detail: 80 - - - No trecho do arquivo value.yaml entregue do - HPCC Systems (acima) global: é um dicionário de - nível superior. Conforme observado nos comentários, as configurações na - seção global se aplicam a todos os componentes do HPCC Systems. Observe - a partir do recuo que os outros valores estão aninhados nesse dicionário - global. - - - Imagem - - Em nosso arquivo values.yaml entregue, o - valor imediatamente após global: é image: você - deve usar uma versão nomeada específica em vez de usar o "latest", - como também indicado nos comentários no arquivo de valores. A versão - do chart do Helm e a versão da plataforma devem corresponder. - Idealmente, você não deveria ter que definir o image.version. Por - padrão, ele corresponderá à versão do chart do helm. - - - - O valor root +No trecho de arquivo values.yaml + fornecido pelo HPCC Systems, global:(acima), é o + dicionário de nível superior. Conforme observado nos comentários, as + configurações na seção global se aplicam a todos os componentes do + HPCC Systems. Observe no nível de indentação que os outros valores + estão aninhados nesse dicionário global. - A entrada de nível de definição/dicionário global é root. Por - exemplo + Os itens definidos na seção global são compartilhados entre + todos os componentes. - root: "hpccsystems" # change to pull your images somewhere other than DockerHub hpccsystems - - - No arquivo values.yaml, isso usa nosso - repositório específico do HPCC Systems. É possível que você queira - extrair de algum outro repositório, então é onde definir esse - valor. - - root: SomeValue - - - - Outros valores de chart - - Itens definidos na seção global são compartilhados entre - componentes. - - Examplos de valores global são seções de armazenamento e - segurança. + Alguns exemplos de valores globais no arquivo values.yaml + fornecido são as seções de armazenamento e segurança. storage: planes: - e também + and also security: eclSecurity: @@ -1231,13 +1222,14 @@ global: embedded: "allow" pipe: "allow" extern: "allow" - datafile: "allow"Nos exemplos acima, storage: e security: - são valores globais do chart. + datafile: "allow"No exemplo acima, + storage: e security: são + valores globais. - - Usage + + Uso do arquivo HPCC Systems Values.yaml O arquivo values.yaml do HPCC Systems é usado pelo chart Helm para controlar como o HPCC Systems é implantado. O @@ -1246,72 +1238,35 @@ global: values.yaml destina-se a ser um guia de instalação de demonstração de início rápido que não é apropriado para uso prático não trivial. Você deve personalizar sua implantação para uma que seja - mais adequada às suas necessidades específicas. Para personalizar sua - implantação, substitua os valores de estoque no arquivo - values.yaml, como no exemplo a seguir: - - helm install myhpcc hpcc/hpcc -f myoverrides.yaml - - O exemplo acima usa o arquivo - myoverrides.yaml por meio do parâmetro -f, que - substitui quaisquer valores especificados no arquivo - values.yaml do HPCC Systems. É importante observar - que isso mescla as substituições de myoverrides.yaml. Qualquer coisa que - esteja nos valores no próprio chart do helm que não seja substituído - pelos valores passados permanecerá ativo. Quando houver 2 arquivos yaml - como este exemplo (as pilhas values.yaml e - myoverrides.yaml), se houver uma entrada correspondente (qualquer coisa - que não seja um dicionário), o valor do segundo arquivo substituirá o - primeiro. Os dicionários, no entanto, sempre serão mesclados. + mais adequada às suas necessidades específicas. Mais informações sobre implantações personalizadas são abordadas - em outras seções, bem como na documentação do Kubernetes Helm. Consultar - a documentação do Helm fornece detalhes completos para todos os aspectos - do uso do gráfico do Helm, e não apenas para alguns casos selecionados - descritos. - - - Caso de Uso - - Por exemplo, você deseja atualizar os detalhes do log. Você pode - ter outro arquivo yaml para atualizar esse valor ou qualquer outro - valor de lista usando um arquivo yaml de substituição. - - Como veremos mais adiante, os componentes são definidos como - listas, portanto, qualquer definição de um componente em um arquivo de - valores do usuário substituirá todas as instâncias do componente no - chart padrão. Você pode remover todos os componentes definidos em uma - lista, substituindo a lista por uma lista nula, por exemplo, - - thor: [] - - Isso removerá todo os componentes Thor. - - Outras opções (por exemplo, configurar os custos para cpu ou - acesso a arquivos) são implementadas como um dicionário, de modo que - as opções podem ser definidas seletivamente em um arquivo de valores - de usuários, e as outras opções serão mantidas. - + nas seções anteriores, bem como na documentação do Kubernetes e do + Helm. Mesclando e Sobrescrevendo - Tendo vários arquivos yaml, como um para registro, outro para - armazenamento, outro para segredos e assim por diante, os arquivos - podem estar no controle de versão. Eles podem ser versionados, - verificados, etc. e têm o benefício de apenas definir/alterar a área - específica necessária, garantindo que todas as áreas não alteradas - sejam deixadas intocadas. A regra aqui para manter em mente onde - vários arquivos yaml são aplicados, os mais recentes sempre - substituirão os valores dos anteriores. Eles são mesclados em - sequência. + Tendo vários arquivos YAML, como um para registro, outro para + armazenamento, outro para secrects e assim por diante, permite uma + configuração granular. Esses arquivos de configuração podem estar + todos sob controle de versão. Podem ser versionados, verificados, etc. + e têm o benefício de apenas definir/alterar a área específica + necessária, garantindo que todas as áreas não alteradas sejam deixadas + intocadas. + + A regra aqui é ter em mente onde vários arquivos YAML são + aplicados, os últimos sempre substituirão os valores dos anteriores. + Eles são sempre mesclados em sequência. Os valores são sempre + mesclados na ordem em que são fornecidos na linha de comando do + Helm. Outro ponto a considerar, onde existe um dicionário global como root: e seu valor é redefinido no 2º arquivo (como um dicionário) ele não seria sobrescrito. Você não pode simplesmente substituir um dicionário. Você pode redefinir um dicionário e defini-lo como nulo (como o exemplo Thor na seção anterior), o que efetivamente o - eliminará. + eliminará o primeiro. ATENÇÃO: Se você tivesse uma definição global (como storage.planes) e a mesclasse onde ela fosse @@ -1327,7 +1282,7 @@ global: Geralmente aplicável Esses itens são geralmente aplicáveis para nossos arquivos - yaml do HPCC Systems Helm. + YALM do HPCC Systems Helm. @@ -1343,65 +1298,64 @@ global: - yaml são mesclados em sequência. + YAML são mesclados em sequência. Geralmente em relação aos componentes do HPCC Systems, os - componentes são listas. Como dito anteriormente, se você tiver uma - lista de valores vazia [ ], isso invalidaria essa lista em outro + componentes primeiramente são listas. Se você tiver uma lista de + valores vazia [ ], isso invalidaria essa lista em outro lugar. - Uso adicional + Additional Usage - Os componentes são adicionados ou modificados passando - sobreposições. Os valores do chart são substituídos apenas, passando no - arquivo de valores de substituição usando -f, (para arquivo de - substituição) ou via --set, onde você pode substituir um único valor. Os - valores passados são sempre mesclados na ordem em que são fornecidos na - linha de comando do helm. + Os componentes do HPCC Systems são adicionados ou modificados + passando valores de substituição. Os valores do gráfico do Helm são + substituídos, seja passando o(s) arquivo(s) de valores de usando -f, + (para o arquivo de substituição) ou via --set onde você pode substituir + um único valor. Os valores passados são sempre mesclados na mesma ordem + em que são fornecidos na linha de comando do helm. Por exemplo, você pode helm install myhpcc hpcc/hpcc -f myoverrides.yamlPara - sobrepor quaisquer valores entregues no - values.yaml. Ou você pode usar --set conforme o - exemplo: + sobrepor quaisquer valores entregues no values.yaml + passando por valores definidos em + myoverrides.yaml + + Você também pode utilizar --set conforme o exemplo a + seguir: helm install myhpcc hpcc/hpcc --set storage.daliStorage.plane=dali-plane + Para sobrepor somente um arquivo em específico. + + É até possível combinar substituições de arquivo e valor único, + por exemplo: + Para substituir apenas o valor global.image.version. Novamente, a ordem em que os valores são mesclados é a mesma em que são emitidos na linha de comando. Agora considere: helm install myhpcc hpcc/hpcc -f myoverrides.yaml --set storage.daliStorage.plane=dali-plane - No exemplo anterior, a flag --set no comando acima substitui o - valor de storage.daliStorage.plane (if) definido em myoverrides.yaml, - que substitui qualquer configuração de arquivo - values.yaml e resulta em defini-lo como dali-plane. - Portanto, independentemente do valor no arquivo yaml para essa - configuração específica, a ordem especificada na linha de comando o - substitui na ordem fornecida na linha de comando. - - - Opções de linha de comando + No exemplo anterior, a flag --set substitui o valor para + storage.daliStorage.plane (if) definido no + myoverrides.yaml, que substituiria qualquer + configuração do arquivo values.yaml e resultaria na + configuração de seu valor como dali-plane. - Se a flag --set for usada na instalação do - helm ou na atualização do helm, esses valores serão simplesmente - convertidos em YAML no lado do cliente. + Se a flag --set for usada na instalação do + helm ou na atualização do helm, esses valores serão simplesmente + convertidos em YAML no lado do cliente. - Você pode especificar a flag -f várias vezes. A prioridade será - dada ao último arquivo (mais à direita) especificado.$ helm install myhpcc hpcc/hpcc -f myvalues.yaml -f override.yaml - - Para o exemplo acima, se myvalues.yaml e override.yaml - contivessem uma chave chamada 'Test', o valor definido em - override.yaml teria precedência. - + Você pode especificar as flags de substituição várias vezes. A + prioridade será dada ao último arquivo (mais à direita) + especificado. diff --git a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ContainerLogging.xml b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ContainerLogging.xml index b5c68ece587..ca7c57a612f 100644 --- a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ContainerLogging.xml +++ b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/ContainerLogging.xml @@ -491,5 +491,41 @@ ContainerLog helm install myhpcc ./hpcc --set -f ./examples/logging/esp-eclwatch-low-logging-values.yaml + + + Asychronous logging configuration + + Por padrão, as entradas de log serão criadas e registradas de + forma assíncrona, para não bloquear o cliente que está registrando. As + entradas de log serão mantidas em uma fila e geradas em uma thread em + segundo plano. Esta fila tem um limite, uma vez atingido, o cliente + bloqueará aguardando capacidade. Como alternativa, o comportamento pode + ser configurado de forma que, quando esse limite for atingido, as + entradas de log sejam descartadas e perdidas para evitar qualquer + possível bloqueio. + + By default log entries will be created and logged asynchronously, + so as not to block the client that is logging. Log entries will be held + in a queue and output on a background thread. This queue has a maximum + depth, once hit, the client will block waiting for capacity. + Alternatively, the behaviour can be be configured such that when this + limit is hit, logging entries are dropped and lost to avoid any + potential blocking. + + NB: normalmente, espera-se que a pilha de registro continue e o + limite de fila padrão seja suficiente para evitar qualquer + bloqueio. + + Os padrões podem ser configurados definindo o + <section>.logging.queueLen e/ou + <section>.logging.queueDrop. + + Ajustar <section>.logging.queueLen para 0 desabilitará o log + assíncrono, ou seja, cada log será bloqueado até ser concluído. + + Ajustar <section>.logging.queueDrop para um valor não-zero + (N) fará com que N entradas de log da fila sejam descartadas se o + queueLen for atingido. + diff --git a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/CustomConfig.xml b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/CustomConfig.xml index 1fea7e3485e..e2cab9b320d 100644 --- a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/CustomConfig.xml +++ b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/CustomConfig.xml @@ -36,7 +36,7 @@ A segunda maneira é modificando os valores padrão e salvando por meio da seguinte linha de comando: - helm show values hpcc/hpcc > myvalues.yaml + helm show values hpcc/hpcc > myvalues.yamlj Isso pode estar em conformidade com as diretrizes do CaC, se você colocar esse arquivo sob controle de versão, mas dificulta a @@ -129,8 +129,8 @@ O arquivo tworoxies.yaml file deve se parecer com este aqui: - Nota: Os comentários foram - removidos para simplificar o examplo: + Observação: Os comentários + foram removidos para simplificar o examplo: roxie: - name: roxie @@ -316,4 +316,385 @@ helm upgrade mycluster hpcc/hpcc -f tworoxies.yaml -f twothors.yaml + + + Rastreamento de Custos de Contêineres + + Com o advento da plataforma de sistemas HPCC em contêineres, + introduzimos informações de rastreamento de custos. Isso é particularmente + útil ao usar instâncias de plataforma HPCC Systems nativas da nuvem em uma + configuração de nuvem em que algum planejamento e configuração podem + ajudar a reduzir as despesas. + + Duas novas colunas foram adicionadas à página de workunits no ECL + Watch. As colunas podem ser classificadas por qualquer coluna de custo, + assim como as outras colunas no ECL Watch, clicando no topo da + coluna. + + + Tipos de custos + + Existem três tipos de custos que são rastreados. + + + + Custos de Execução + + + + Custos de Armazenamento + + + + Custo de Acesso a Arquivo + + + + + + OBSERVAÇÃO: + + + Todos os valores de custo calculados e exibidos são + aproximados. Existem muitas variáveis que podem resultar em + imprecisões. Esses valores de custo devem ser usados apenas como + um guia. + + + + + + Custos de Execução + + Custo de execução é o valor referente a custo de execução da + workunit, do graph e subgraphs no cluster Thor. Inclui o custo de + todos os nós diretamente necessários para executar o trabalho e inclui + o custo de: + + + + Nós do executor + + + + Nós do Compilador + + + + Nós do agente e do gereciador + + + + O valor do custo de execução de uma workunit é exibido no ECL + Watch em sua página de resumo e é organizado em grap, subgraph e nível + de atividade. Os valores de custo do graphh e do subgraph estão + disponíveis no visualizador de métricas e graph. + + + + Observação: + + + O custo de execução das workunits ROXIE não está + implementado atualmente. + + + + + + Job Guilhotina + + O de risco de custos descontrolados é uma preocupação para + cobrança baseada em uso potencialmente ilimitada. Assim, o recurso + job guilhotina é fornecido para gerenciar esse cenário, limitando os + custos por meio dos valores limite e do limite rígido. Quando o + custo de um job atinge um valor definido, ele pode ser encerrado, + controlando os custos que podem incorrer. + + + + Observação: + + + Esta funcionalidade atualmente é suportada somente para + os jobs do Thor. + + + + + + + + + + Custo de armazenamento + + Esse é o custo de hospedar os dados no plano de armazenamento. + Não inclui os custos das operações de dados, como custos de leitura ou + gravação. + + + + Observação: + + + Os custos não são registrados para arquivos temporários + ou de derramamento, porque o armazenamento local está incluído + no preço da VM usada para calcular os custos de + execução. + + + + + Os custos de armazenamento não podem ser vistos como um valor + separado no ECL Watch. Eles só podem ser visualizados como parte de um + campo de custo na página de resumo de um arquivo lógico. + + + + Custo de acesso aos arquivos + + Os custos de leitura e gravação em arquivos são referidos como + custos de acesso a arquivos. Vários planos de armazenamento cobram por + operações de dados separadamente. O valor do custo de acesso ao + arquivo incluirá o custo de leitura e gravação. Neste momento, + quaisquer outros custos relacionados com ações de arquivo (como + excluir ou copiar) não serão registrados ou incluídos como parte dos + custos. + + Na página de resumo Logical File no ECL Watch, o custo de acesso + ao arquivo aparece como parte do campo de custo. + + As despesas de uma workunit para acessar arquivos lógicos também + são incluídas nas estatísticas e atributos da workunit. O custo de + leitura/gravação é relatado no registro da atividade e somado nos + níveis de graph, subgraph e escopo do fluxo de trabalho. + + O custo geral de acesso a arquivos para uma workunit é rastreado + e relatado na página de resumo. + + Na página de resumo Logical File, você pode ver o novo campo de + custo. É o custo total de armazenamento e acesso aos dados. + Atualmente, as informações de custo são geradas apenas para jobs Thor + e hThor. + + + + + Custo de Configuração + + Esta seção detalha a configuração dos parâmetros de configuração + dos jobst. A configuração dos custos do jobs trabalho em uma instância + HPCC Systems sistemas HPCC nativos da nuvem é feita usando o chart helm. + Por padrão, o arquivo values.yaml fornecido contém + uma seção para configurar custos. + + Por exemplo: + + + + Crie um novo arquivo de texto e o nomeie mycosts.yaml e abra em um editor de + texto. + + Você pode usar um editor de texto. + + + + Salve os valores padrão em um arquivo de texto: + + helm show values hpcc/hpcc > myvalues.yaml + + + + Abra o arquivo salvo (myvalues.yaml) em um editor de + texto. + + + + Copie a sessão cost: e cole + em outro novo arquivo mycosts.yaml. + + + + Altere quaisquer valores relacionados a custos desejados, + conforme apropriado. + + + + Salve o arquivo e feche o editor de texto. + + + + Implante sua plataforma HPCC Systems, adicionando a nova + configuração ao seu comando: + + helm install mycluster hpcc/hpcc -f mycosts.yaml + + + + Os valores de configuração fornecem as informações de preços e + informações de formatação de moeda. Os seguintes parâmetros de + configuração de custo são suportados:The configuration values provide + the pricing information and currency formatting information. The + following cost configuration parameters are supported: + + + + + + + + + + currencyCode + + Usado para formatação de moeda de valores de + custo. + + + + perCpu + + Custo por hora de uma única CPU. + + + + storageAtRest + + Custo de armazenamento por gigabyte por mês. + + + + storageReads + + Custo por 10.000 operações de leitura. + + + + storageWrites + + Custo por 10.000 operações de gravação. + + + + + + + Configurando custos da Nuvem + + O arquivo de configuração values.yaml + padrão é configurado com os seguintes parâmetros de custo na seção + global/cost: + + cost: + currencyCode: USD + perCpu: 0.126 + storageAtRest: 0.0135 + storageReads: 0.0485 + storageWrites: 0.0038 + + + O atributo currencyCode deve + ser configurado com o código de país ISO 4217. (O padrão da plataforma + HPCC Systems é USD se o código da moeda estiver faltando). + + O perCpu da seção global/cost + se aplica a todos os componentes que não foram configurados com seu + próprio valor perCpu. + + Um valor perCpu específico para um componente pode ser definido + adicionando um atributo cost/perCPU na seção desse componente. + + Para componentes Dali: + + dali: + - name: mydali + cost: + perCpu: 0.24 + + + + Configuração dos Custos do Thor + + Os componentes Thor suportam parâmetros de custo adicionais que + são usados para o recurso de "guilhotina" de trabalho: + + + + + + + + + + limit + + Define o limite de custo “flexível” que uma unidade + de trabalho pode incorrer. O limite é “suave” no sentido de + que pode ser substituído pela opção do ECL maxCost. Um nó será encerrado se + exceder seu maxCost (se + definido) ou o valor do atributo limite (se o maxCost não for definido). + + + + hardlimit + + Define o limite de custo máximo absoluto, um limite + que não pode ser substituído pela configuração da opção ECL. + O valor maxCost que exceder + o hardlimit será ignorado. + + + + + + O exemplo a seguir define os limites de custo dos trabalhos, + adicionando os atributos à seção Thor do yaml de configuração. + + thor: +- name: thor + prefix: thor + numWorkers: 2 + maxJobs: 4 + maxGraphs: 2 + cost: + limit: 10.00 # maximum cost is $10, overridable with maxCost option + hardlimit: 20.00 # maximum cost is $20, cannot be overridden + + + + Parâmetros dos Custos de Armazenamentos + + Os parâmetros de custos de armazenamentos (storageAtRest, storageReads e storageWrites) podem ser adicionados na seção + de custo do plano de armazenamento para definir parâmetros de custo + específicos para o plano de armazenamento. + + Por exemplo: + + storage: + planes: + - name: dali + storageClass: "" + storageSize: 1Gi + prefix: "/var/lib/HPCCSystems/dalistorage" + pvc: mycluster-hpcc-dalistorage-pvc + category: dali + cost: + storageAtRest: 0.01 + storageReads: 0.001 + storageWrites: 0.04 + + + Os parâmetros de custo de armazenamento na seção global são + usados apenas se nenhum parâmetro de custo for especificado no plano + de armazenamento. + + + diff --git a/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/TerraformDeployChap.xml b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/TerraformDeployChap.xml new file mode 100644 index 00000000000..2e5393bbe5b --- /dev/null +++ b/docs/PT_BR/ContainerizedHPCC/ContainerizedMods/TerraformDeployChap.xml @@ -0,0 +1,628 @@ + + + + Implantando o HPCC Systems<superscript>®</superscript> com + Terraform + + As implantações manuais podem ser propensas a erros e inconsistentes. + À medida que suas implantações se tornam mais personalizadas e sua + necessidade de recursos adicionais aumenta, isso pode se tornar + exponencialmente mais difícil e demorado. + + Felizmente, existem várias ferramentas de orquestração de IaC + (infraestrutura como código) disponíveis que podem simplificar o processo de + implantação. Uma dessas ferramentas de orquestração é o Terraform. Este + capítulo fornece instruções sobre como usar módulos Terraform para implantar + uma instância do HPCC Systems especificamente na nuvem do Azure. + + Esses módulos foram desenvolvidos pela equipe da plataforma HPCC + Systems para uso geral da comunidade de código aberto. Você pode exigir + personalizações específicas para suas necessidades particulares. Por + exemplo, sua organização pode exigir módulos opinativos para sistemas de + produção. Você pode desenvolver seus próprios módulos personalizados de + acordo com suas necessidades e utilizá-los da mesma maneira descrita + aqui. + + + Implantação do Terraform Interativo  + + Esta seção detalha a implantação da plataforma HPCC Systems em + contêiner no Azure usando o Terraform. Usando o código aberto e módulos + adicionais do repositório de código aberto HPCC Systems Terraform. Nenhum + conhecimento prévio de Terraform, Kubernetes ou Azure é necessário. + + As etapas para implantar uma instância do HPCC Systems usando os + módulos Terraform fornecidos são detalhadas nas seções subsequentes. Um + breve resumo dessas etapas é o seguinte: + + + + Clone o repositório do módulo HPCC Systems Terraform + + + + Copie os arquivos de configuração (admin.tfvars) do diretório + /examples para o diretório do módulo correspondente + + + + Modifica os arquivos de configuração para cada módulo + + + + Inicializar os módulos + + + + Aplicar os módulos inicializados + + + + A força de usar módulos Terraform para implantar seu sistema, você + só precisa configurá-los uma vez. Depois de instalados e configurados, + você pode reutilizá-los para criar uma instância idêntica do seu sistema. + Você pode fazer isso inicializando e aplicando-os. + + + Requirimentos + + O que você precisará para implantar uma instância HPCC Systems com + Terraform: + + + + Um sistema operacional como Linux, MacOS, ou Windows. + + + + Um navegador. Como Chrome ou Firefox. + + + + Git e uma conta do Github que você pode acessar e clonar o + repositório. + + + + Uma conta do Azure com permissões, direitos, créditos e + credenciais suficientes. Para obter uma, acesse www.azure.com ou + fale com seu gerente se acreditar que seu empregador pode ter uma + conta corporativa. + + + + Um editor de código de sua escolha. Existem alguns editores + integrados ao Azure, como o VS Code, vi o Visual Editor, o Nano, ou + você pode optar por usar qualquer outro. + + + + A opção mais fácil que também garante que você tenha todas as + ferramentas necessárias é usar o Azure é o portal de comando. Supondo + que você tenha uma conta do Azure com todas as credenciais apropriadas, + basta acessar o portal de comando do Azure + + https://portal.azure.com/ + + Se esta for a primeira vez que você acessa o cloud shell, o Azure + solicitará que o armazenamento seja necessário para que o cloud shell + persista nas configurações e arquivos da conta. Clique nos prompts para + criar o armazenamento. Você deve ser presenteado com um shell. Neste + ponto, o cloud shell já deve estar conectado à sua conta do Azure. A + grande vantagem de usar o cloud shell é que ele também terá outros + pré-requisitos instalados para você, como git, kubectl, helm e até mesmo + um editor. Caso contrário, além de instalar a CLI do Azure, você também + precisará instalar os outros pré-requisitos. + + + + Repositório Terraform + + O repositório HPCC Systems Terraform, + terraform-azurerm-hpcc é um repositório de código + onde os módulos HPCC Systems Terraform são armazenados. O repositório + Terraform contém três módulos independentes necessários para instanciar + um cluster HPCC Systems. Estes são os módulos de rede, armazenamento e + AKS (Azure Kubernetes Service). O módulo de rede deve ser implantado + primeiro, seguido pelo módulo de armazenamento. Só então o AKS ou módulo + raiz pode ser implantado. Esses módulos chamam automaticamente outros + módulos dependentes na inicialização. Existem dependências que devem + estar em vigor para que todos os módulos funcionem adequadamente. + + + Clonando o Repositório Terraform + + Clonando o Repositório Terraform, + terraform-azurerm-hpcc hospedado na conta do HPCC + Systems no GitHub. + + https://github.com/hpcc-systems/terraform-azurerm-hpcc.git + + Para clonar o repositório: + + + + Abra o terminal + + + + Determine onde armazenar o repositório. Selecione um local + fácil de lembrar. Este será o território raiz do + Terraform. + + + + Altere o diretório para a sua localização + escolhida. + + + + Execute o seguinte comando: + + git clone https://github.com/hpcc-systems/terraform-azurerm-hpcc.git  + + Depois que o repositório for clonado, você percorrerá + o diretório de cada módulo e configurará/modificará o arquivo + admin.tfvars e, em seguida, o aplicará. + + + + + Módulos para Modificar + + Uma vez instalados, esses módulos podem ser reutilizados para + criar uma cópia exata da instância. + + A ordem de implantação desses módulos Terraform é de fato + importante. + + A ordem de implantação que você deve seguir é: + + + + Rede virtual + + + + Contas de Armazenamento  + + + + Módulo Root (AKS) + + + + + + + + + + + + Modules  + + Location  + + + + + + Virtual network  + + terraform-azurerm-hpcc/modules/virtual_network  + + + + Storage accounts  + + terraform-azurerm-hpcc/modules/storage_accounts  + + + + AKS  + + terraform-azurerm-hpcc  + + + + + + Esses módulos devem ser aplicados nessa ordem, pois se baseiam nos + recursos levantados pelo módulo anterior. + + Você terá acesso aos módulos após clonar o repositório + terraform-azurerm-hpcc. + + + + Modificar os Módulos + + Primeiro, você copiará o arquivo de configuração + admin.tfvars do subdiretório de exemplos para esse + diretório de módulos. Em seguida, você modificará o arquivo que acabou + de copiar. Você deve repetir esta etapa para cada módulo. + + + + Primeiramente alterar o diretório para o da rede + virtual. + + cd terraform-azurerm-hpcc/modules/virtual_network + + + + Copie os arquivos admin.tfvars de ./examples para + ./virtual_network. + + cp examples/admin.tfvars ./admin.tfvars  + + + + Para modificar o módulo você pode digitar o seguinte comando + (Observe usando o editor de código no + exemplo, se preferir pode usar nano, vi ou qualquer editor de + texto): + + code terraform-azurerm-hpcc/modules/virtual_network/examples/admin.tfvars  + + Com o arquivo admin.tfvars aberto, você pode percorrer cada bloco + de objeto ou argumento e defini-lo com seus valores preferidos. Mais + informações sobre os arquivos de módulo disponíveis no + README.md no repositório terraform-azurerm-hpcc do HPCC + Systems. + + admin = {  +  name  = "YourName"  + email = "YourEmail@example.com"  + }  + + metadata = {  + project             = "hpccdemo"  + product_name        = "vnet"  +  business_unit       = "commercial"  +  environment         = "sandbox"  + market              = "us"  +  product_group       = "contoso"  +  resource_group_type = "app"  +  sre_team            = "hpccplatform"  +  subscription_type   = "dev"  + }  +  + tags = { "justification" = "testing" }  +   + resource_group = {  +   unique_name = true  +   location    = "eastus2"  + }    + + + + Modifique este arquivo e substitua os valores dos campos de + nome e e-mail pelo seu nome de usuário e endereço de + e-mail. + + + + Salve o arquivo como admin.tfvars no diretório do + módulo. + + + + + Modificando o módulo AKS + + O Módulo AKS é um pouco diferente dos demais. Não está no + subdiretório de módulos, está no diretório raiz base onde você clonou + anteriormente o repositório do Terraform. Você ainda precisa copiar o + arquivo admin.tfvars do diretório de exemplos para esse diretório + raiz, assim como fez para os outros módulos. No entanto, existem + algumas modificações adicionais que você precisa fazer neste + arquivo. + + + + Copie os arquivos admin.tfvars de ./examples para o + diretório AKS. + + + + cp examples/admin.tfvars ./admin.tfvars  + + + + Modifique o arquivo admin.tfvars, mais uma vez adicione seu + nome de usuário e seu e-mail. + + + + Se você estiver usando o Azure Cloud Shell, localize a + configuração para auto_launch_eclwatch e defina-a como false + da seguinte forma: + + auto_launch_eclwatch = false + + + + Além disso, há uma configuração para a versão que, por padrão, é comentada. + Opcionalmente, remova o comentário da configuração da versão e + defina uma versão específica. + + + + + + + + Faça quaisquer outras alterações de configuração e salve o + arquivo admin.tfvars. + + + + Observação: + + + Você pode criar vários arquivos de configuração para + diferentes implantações. Como as múltiplas versões que + acabamos de descrever. Nesse caso, você pode querer salvar + cada configuração com um nome diferente. + + + + + + + + + + Inicializando os módulos Terraform + + Após configurar os módulos, o próximo passo é inicializar. O + comando init do Terraform declara o diretório de + trabalho atual como a raiz ou o módulo de chamada. Durante esta + operação, o Terraform baixa todos os módulos filhos de suas fontes e os + coloca nos diretórios relativos apropriados. + + Mais uma vez, a ordem é importante. Inicialize os módulos na mesma + ordem de precedência, primeiro a rede virtual, depois a conta de + armazenamento e, em seguida, o AKS ou raiz. + + + + Observação: + + + Embora a ordem em que os arquivos são aplicados seja + importante, você pode executar as etapas de inicialização e + aplicação depois de modificar os arquivos enquanto já estiver no + respectivo diretório. + + + + + Para inicializar os módulos  + + + + Alterar o diretório para o diretório de módulos. + + + + Execute o terraform init in no diretório: + + terraform init + + + + Confirme se o módulo foi inicializado com sucesso. + + + + Aplicar o módulo + + + + + + Aplicando os Módulos do Terraform + + Esta etapa gera um Plano do Terraform para confirmar suas opções + de configuração. Um plano do Terraform exibe exatamente o que ele fará + para que você possa analisá-lo antes de aplicá-lo. Você pode revisar e + aprovar a implementação do plano ou anular o plano e revisar seus + módulos de configuração para alterações adicionais. + + Ao inserir o comando Terraform, ele validará o código do Terraform + e gerará o plano, que você aceitará ou rejeitará para prosseguir. Assim + como nas etapas anteriores, a ordem em que os módulos são aplicados é + importante. Você deve aplicar a rede virtual primeiro, depois o + armazenamento e, finalmente, a raiz. + + + + Observação: + + + Embora a ordem em que os arquivos são aplicados seja + importante, você pode executar as etapas de inicialização e + aplicação depois de modificar os arquivos enquanto já estiver no + respectivo diretório. + + + + + Para gerar um plano e aplicar os Módulos:  + + + + Altere o diretório para o diretório dos módulos. + + + + Execute o Terraform, especificando o uso do arquivo + admin.tfvars que você configurou anteriormente.  + + terraform apply –var-file=admin.tfvars  + + + + Observação: + + + Se você criou vários arquivos de configuração conforme + descrito na seção anterior (para o módulo AKS), pode + especificar o uso desse arquivo var específico. + + + + + + + O plano do Terraform é exibido, revise o plano e, se estiver + alinhado com o que você esperava, aprove o plano e digite + YES. + + Observação: Se algo não + parecer correto, não digite YES. Qualquer coisa diferente de yes + abortará o aplicativo. Você pode então reexaminar os arquivos + admin.tfvars das etapas anteriores e fazer as alterações + necessárias. + + + + O Terraform inicializa todos os recursos declarados até que + estejam prontos. Isso pode demorar um pouco, pois está inicializando + vários recursos. + + Successful completion displays a message similar to the + following: + + Apply complete! Resources: 11 added, 0 changed, 0 destroyed. + + Observação: O número de + recursos adicionados, alterados ou destruídos deve corresponder ao + que o plano indicou na etapa anterior. + + + + Repita essas etapas para o diretório storage_accounts e, em + seguida, para o diretório do módulo raiz. + + + + Depois que o Terraform aplicar com sucesso todos os módulos na + sequência correta e todos eles inicializarem e entrarem no estado Ready, + seu cluster HPCC Systems estará funcionando. + + + Verifica a instalação + + Com a implantação bem-sucedida do Terraform, o Kubernetes + provisionou todos os pods do HPCC Systems. Para verificar o status, + execute: + + kubectl get pods + + Observação: Se esta for a + primeira vez que a instalação do helm é executada, pode levar algum + tempo para que todos os pods entrem no estado Running. O Azure precisa + extrair imagens de contêiner do Docker, colocar cada componente + online, etc. + + Depois que todos + os pods STATUS estiverem em execução, o cluster HPCC Systems estará + pronto para ser usado. + + + + + Acessando o ECLWatch + + Um IP-externo é necessário para o ESP executar o ECLWatch. Isso + será listado como o serviço eclwatch e pode ser obtido executando o + seguinte comando: + + kubectl get svc + + Seu output deverá ser similar ao modelo abaixo: + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +eclservices ClusterIP 10.0.44.11 <none> 8010/TCP 11m +eclwatch LoadBalancer 10.0.21.16 12.87.156.228 8010:30190/TCP 11m +kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4h28m +mydali ClusterIP 10.0.195.229 <none> 7070/TCP 11m + + Use o IP-Externo listado para o serviço ECLWatch. Abra o navegador + e digite http://<ip-externo>:8010/, por exemplo, + http://12.87.156.228:8010. Caso tudo estiver funcionando conforme o + esperado, a página inicial do ECLWatch será exibida. + + + + Derrubando o Cluster AKS + + Destruir o Cluster AKS fará exatamente isso - destruí-lo + completamente. Esse é o termo Terraform para derrubar e remover todos os + recursos e processos implantados pelo Terraform. + + Assim como na instalação, a ordem em que os módulos são destruídos + também é importante. Lembre-se de que o módulo AKS + deve ser destruído antes do módulo de rede virtual. Tentar + destruir recursos na ordem errada pode deixar sua implantação em um + estado estranho e incorrer em custos desnecessários. Para ajudar a + reduzir seus custos totais, sempre destrua seu AKS quando não pretender + usá-lo mais. + + Depois de configurados, os módulos persistentes do Terraform podem + restaurar facilmente sua implantação. Uma cópia exata da instância pode + ser levantada simplesmente emitindo a etapa de aplicação do Terraform + que você fez anteriormente. Esta é a verdadeira beleza dos módulos do + Terraform, uma vez criados, eles podem ser reutilizados para gerar uma + cópia exata de sua implantação. Você também pode ter outras opções de + configuração prontamente disponíveis para implantação.  + + Para destruir os Módulos  + + + + Altere o diretório para o diretório raiz AKS: + terraform-azurerm-hpcc  + + + + Para executar o comando de destruição do Terraform  + + terraform destroy –var-file=admin.tfvars  + + + + O plano do Terraform é exibido, revise o plano e, se parecer + correto, aprove o plano digitando YES. + + Para abortar o processo, digite qualquer outra coisa que não + seja YES. + + + + Repita conforme necessário para os outros módulos. No entanto, + certifique-se de que o módulo de rede virtual seja o último a ser + destruído, se você optar por destruí-lo. (Aparentemente, o custo + para deixar a rede virtual funcionando é mínimo, mas verifique com + seu provedor ou gerente para confirmação) + + + + O Terraform, assim como a etapa de aplicação, pode levar alguns + minutos para concluir a destruição de todos os recursos. Ele confirmará + os resultados uma vez competidos. + + + + + diff --git a/docs/PT_BR/DataPatterns/DataPatterns-includer.xml b/docs/PT_BR/DataPatterns/DataPatterns-includer.xml new file mode 100644 index 00000000000..d3512969319 --- /dev/null +++ b/docs/PT_BR/DataPatterns/DataPatterns-includer.xml @@ -0,0 +1,76 @@ + + + + + Padrão de Dados + + + + + + + + + Equipe de documentação de Boca Raton + + + + Sua opinião e comentários sobre este documento são muito + bem-vindos e podem ser enviados por e-mail para + docfeedback@hpccsystems.com + + Inclua a frase Feedback sobre + documentação na linha de assunto e indique o nome do + documento, o número das páginas e número da versão atual no corpo da + mensagem. + + LexisNexis e o logotipo Knowledge Burst são marcas comerciais + registradas da Reed Elsevier Properties Inc., usadas sob licença. + + HPCC Systems® é uma marca registrada da + LexisNexis Risk Data Management Inc. + + Os demais produtos, logotipos e serviços podem ser marcas + comerciais ou registradas de suas respectivas empresas. + + Todos os nomes e dados de exemplo usados neste manual são + fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é + mera coincidência. + + + + + + + + + HPCC Systems® + + + + + + + + + + + + + + + + + + diff --git a/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsBundle.xml b/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsBundle.xml new file mode 100644 index 00000000000..94b5bc52c0e --- /dev/null +++ b/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsBundle.xml @@ -0,0 +1,611 @@ + + + + <emphasis>Data Patterns Bundle</emphasis> + + DataPatterns é um pacote ECL que fornece perfil de dados adicional e + ferramentas de pesquisa para um programador ECL. + + + Instalação + + Dependendo de qual IDE você está usando, VS Code ou ECL IDE, siga as + etapas apropriadas abaixo. + + + Instalando em VS Code + + + + Abra o VS Code. + + + + Na barra de menu à esquerda, clique no logotipo HPCC + Systems. + + + + + + Em “Bundles”, você verá um pacote chamado + “DataPatterns”. + + + + + + Clique no link de instalação para instalar o pacote. + + + + + + Instalando no ECL IDE + + Talvez seja necessário navegar até o diretório bin das ferramentas + do cliente antes de executar o comando ou usar o caminho completo para a + ferramenta ECL. + + + + Use a ferramenta de linha de comando ECL para instalar o + pacote configurável. + + ecl bundle install https://github.com/hpcc-systems/DataPatterns.git + + + + Após a instalação, todo o código aqui fica disponível após + importá-lo em seu código ECL: + + IMPORT DataPatterns; + + + + Instruções completas para gerenciar pacotes ECL podem ser + encontradas na documentação do IDE ECL e das ferramentas cliente + HPCC. + + Observe que é possível usar este código sem instalá-lo como um + pacote. Para fazer isso, basta disponibilizá-lo em seu IDE e ignorar o + arquivo Bundle.ecl. Com o IDE do Windows, o diretório DataPatterns não + deve ser um item de nível superior na sua lista de repositórios; ele + precisa ser instalado um nível abaixo do nível superior, como na pasta + "My Files". + + + + + Profile + + O método Profile no pacote é idêntico ao + método Profile na Biblioteca Padrão. Ver ___: + + Exemplo: + + O código para usar o método é um pouco diferente: + + IMPORT DataPatterns; +filePath := '~jd::pg::exampledata::people'; +ds := DATASET(filePath, RECORDOF(filePath, LOOKUP), flat); +profileResults := DataPatterns.Profile(ds); +OUTPUT(profileResults, ALL, NAMED('profileResults')); + + + + NormalizeProfileResults + + O resultado de uma chamada para PROFILE é um + dataset rico. Existem vários campos (dependendo dos recursos solicitados) + e alguns deles podem incluir dataset filhos incorporados para cada campo + do dataset cujo perfil está sendo criado. + + Em algumas circunstâncias, seria vantajoso guardar os resultados do + perfil num formato mais normalizado. Por exemplo, um formato normalizado + permitiria que a tarefa de comparar o resultado de um perfil com outro + fosse muito mais fácil. + + NormalizeProfileResults() aceita apenas um argumento: o dataset que + representa o resultado de uma chamada para PROFILE. O resultado é um + dataset no seguinte formato: + + RECORD + STRING attribute; // Field from profiled dataset + STRING key; // Field from profile results + STRING value; // Value from profile results +END; + + Alguns resultados de perfil são representados com dataset + secundários incorporados (modos, detalhamentos de cardinalidade, padrões + de texto e correlações). Ao normalizar, partes desses dataset filhos são + convertidas em valores de string delimitados por '|' personagem. Se os + registros do dataset filho contiverem informações adicionais, como uma c + ontagem de registros, as informações adicionais serão delimitadas com um + caractere ':'. + + Código de exemplo: + + IMPORT DataPatterns; +filePath := '~thor::mysampledata'; +ds := DATASET(filePath, RECORDOF(filePath, LOOKUP), FLAT); +profileResults := DataPatterns.Profile(ds); +normalizedResults := DataPatterns.NormalizeProfileResults(profileResults); +OUTPUT(normalizedResults, ALL, NAMED('normalizedResults')); profileResults: + + + + + + attribute + + field1 + + + + given_attribute_type + + string + + + + rec_count + + 1000 + + + + fill_count + + 1000 + + + + fill_rate + + 100 + + + + popular_patterns + + data_patterns: AAAAAA : rec_count: 10 data_patterns: AAA + : rec_count: 5 + + + + normalizedResults: + + + + + + attribute + + key + + value + + + + field 1 + + given_attribute_type + + string + + + + field 1 + + rec_count + + 1000 + + + + field 1 + + fill_count + + 1000 + + + + field 1 + + fill_rate + + 100 + + + + field 1 + + popular_patterns + + AAAAAA:10|AAA:5 + + + + + + + + BestRecordStructure + + O método BestRecordStructure no pacote é + idêntico ao método BestRecordStructure na Biblioteca Padrão. Ver + ___: + + Example: + + O código para usar o método é um pouco diferente: + + IMPORT DataPatterns; +filePath := '~jd::pg::exampledata::people'; +ds := DATASET(filePath, RECORDOF(filePath, LOOKUP), flat); +BRSResults := DataPatterns.BestRecordStructure(ds); +OUTPUT(BRSResults, ALL, NAMED('BRSResults')); + + + + Cardinality + + Uma parte de PROFILE() trata da cardinalidade. Se houver um número + suficientemente baixo de valores exclusivos em um atributo, PROFILE() + mostrará automaticamente esses valores junto com a contagem do número de + registros com cada valor. Mas e se você estiver realmente interessado + nesses valores e quiser ver todos eles? Não importa quantos sejam? Insira + a macro da função CARDINALITY(). + + CARDINALITY() encontra todos os valores únicos em um ou mais campos + e exibe a contagem do número de registros para cada valor, sem limitação + no número de campos ou no número de valores encontrados. O resultado é um + dataset simples de três campos: + + STRING attribute; +UTF8 value; +UNSIGNED8 rec_count; + + O único parâmetro obrigatório para CARDINALITY() é um dataset para + processar. Opcionalmente, você pode fornecer uma nomenclatura de string de + campos específicos delimitados por vírgula, se você não quiser processar + todos os campos. Você também pode limitar a análise a apenas uma parte do + dataset (embora isso seja de utilidade provavelmente limitada). + + Exemplo Chamada + + IMPORT DataPatterns; + +filePath := '~thor::mysampledata'; +ds := DATASET(filePath, RECORDOF(filePath, LOOKUP), FLAT); +cardinalityResults := DataPatterns.Cardinality(ds); +OUTPUT(cardinalityResults, NAMED('cardinalityResults'));See + the comments at the beginning of the Cardinality.ecl file for more + details. + + + + Submódulo de validação de dados + + A validação existe como um submódulo dentro de DataPatterns. Contém + duas macros de função: VALIDATE() e FIX(). + + VALIDATE() fornece um mecanismo fácil para testar valores de campo + esperados no nível de registro e, em seguida, anexar esses resultados de + teste a cada registro em um layout padronizado. Os testes são nomeados e + associado a cada teste está um pedaço de ECL que define a aparência de um + campo válido. Os campos com valores que não passam nesse teste são + sinalizados. + + FIX() é a outra metade do teste: Depois de obter a saída de + VALIDATE(), você precisará lidar de alguma forma com os valores dos campos + com falha. A macro da função FIX() processa registros com falhas e oferece + a oportunidade de corrigir o erro ou omitir totalmente o registro. + + + + Validation.Validate() + + As verificações de validação são definidas em um STRING delimitado + por ponto e vírgula. Cada verificação deve estar no seguinte + formato: + + <test_name>:<test_ecl> + + TEST_NAME deve ser um nome que represente de alguma forma a + verificação que está sendo executada. O nome será incluído nos dados + anexados se a verificação falhar. Este nome deve descrever claramente (mas + sucintamente) o que está sendo testado. Não há nenhum requisito para que + um TEST_NAME seja exclusivo (e há alguns casos de uso em que você pode não + querer que ele seja exclusivo), mas, em geral, o nome deve ser exclusivo + em uma única chamada VALIDATE(). Os nomes devem começar com uma letra e + podem conter letras, números, pontos, travessões e sublinhados. + + TEST_ECL é o código ECL que realiza o teste. Se uma string literal + for incluída no teste, os apóstrofos deverão ser escapados porque o teste + está sendo definido dentro de uma string. Se uma função EGEXFIND() ou + REGEXREPLACE() for usada e qualquer coisa dentro do padrão precisar ser + escapada, a barra invertida deverá ter escape duplo. ECL já requer um + único escape (\\. ou \\d), mas incluí-lo em um teste aqui significa que + você terá que escapar duas vezes da barra invertida: \\\\. ou + \\\\d. + + O código ECL usado durante o teste é executado no escopo de um único + registro de dataset. Em termos de sintaxe, é semelhante a criar uma ECL + cláusula de filtro. Como um filtro, a ECL deve avaliar um resultado + BOOLEAN e o que você deseja fazer é retornar TRUE se os dados que estão + sendo testados forem válidos. Resultados inválidos, onde a ECL retorna + FALSO, são os que são anexados ao dataset + + VALIDATE() importa a biblioteca Std ECL, portanto, todas as funções + da biblioteca padrão estão disponíveis para uso em um teste. Além disso, + como VALIDATE() é uma macro, qualquer função que esteja no escopo quando + VALIDATE() é chamada também pode ser usada em um teste. Isso fornece um + pouco de flexibilidade quando se trata de escrever testes. O código de + exemplo abaixo faz referência a STARTSWITHAA() que é um exemplo de um + desses testes fornecidos pelo usuário. + + VALIDATE() também inclui algumas funções definidas internamente para + uso em seus testes como uma conveniência. Algumas são funções de coerção + que alteram o valor de um campo, outras são funções de teste. Esses testes + não estão disponíveis para uso em seus próprios testes personalizados + definidos externamente. + + Auxiliares de coerção: + + + + + + OnlyDigit(s) + + Converta um único argumento em uma string e remova tudo, + exceto dígitos numéricos; retorna uma STRING + + + + OnlyChar(s) + + Converta um único argumento em uma string e remova tudo, + exceto dígitos numéricos; retorna uma STRING + + + + WithoutPunct(s) + + Converta um único argumento em uma string UTF-8 e remova + todos os caracteres de pontuação; retorna uma string + UTF8 + + + + Patternize(s) + + Converta um único argumento em uma string UTF-8 e remova + todos os caracteres de pontuação; retorna um caractere minúsculo + de string UTF8 -> um caractere maiúsculo -> Um dígito + numérico -> 9 todo o resto -> inalterado O resultado é + retornado como uma string UTF8 + + + + Auxiliares de teste: + + + + + + StrLen(s) + + Converta um único argumento em uma string UTF-8 e retorne + seu comprimento como um número inteiro sem sinal + + + + IsOnlyDigits(s) + + Retorne TRUE se cada caractere no valor for um + dígito + + + + IsOnlyUppercase(s) + + Retorne TRUE se cada caractere no valor for um caractere + em maiúsculo + + + + IsOnlyLowercase(s) + + Retorne TRUE se cada caractere no valor for um caracter + em minúsculos + + + + IsDecimalNumber(s) + + Retorne TRUE se o valor for um número, possivelmente + prefixado por um sinal negativo e possivelmente incluindo uma + parte decimal + + + + Auxiliares de teste em nível de registro: + + AllFieldsFilled() Tests every top-level field in the record by coercing + the values to STRING and seeing if any of them are empty; + returns TRUE if no field value is an empty string; note + that this function accepts no argument + + Exemplo de especificação de teste: + + MyValueIsPos:my_value > 0 // my_value must be greater than zero + SomeNumInRange:some_num BETWEEN 50 AND 100 // some_num must be 50..100 + FIPSLength:StrLen(fips) = 5 // length of FIPS code must be 5 + DatesOrdered:dateBegin <= dateEnd // make sure dates are not flippedhere + is a complete example: + + IMPORT DataPatterns; +filePath := '~thor::stock_data.txt'; +DataRec := RECORD STRING tradedate; STRING exchangecode; STRING stocksymbol; +STRING openingprice; STRING highprice; STRING lowprice; STRING closingprice; +STRING sharestraded; STRING share_value; END; +ds := DATASET(filePath, DataRec, CSV(SEPARATOR('\t'), HEADING(1))); +// Custom, external field validation functions +StartsWithAA(STRING s) := s[1..2] = 'AA'; IsValidPrice(STRING + price) := NOT(REGEXFIND('^\d+?00$', price) AND (UNSIGNED)price >= 10000); +checks := 'NonZeroLowPrice:(REAL)lowprice > 0' + '; +NonZeroHighPrice:(REAL)highprice > 0' + '; +LowPriceLessOrEqualToHighPrice:(REAL)lowprice <= (REAL)highprice' + '; +OpeningPriceGreaterThanOne:(REAL)openingprice > 1' + '; +OpeningPriceFormat:REGEXFIND(U8\'9+(\\.9{1,2})?\', +Patternize(openingprice))' + '; +OpeningPriceValid:IsValidPrice(openingprice)' + '; +ClosingPriceValid:IsValidPrice(closingprice)' + '; +SymbolStartsWithAA:StartsWithAA(stock_symbol)' + '; +EveryFieldPresent:AllFieldsFilled()' ; +validationResult := DataPatterns.Validation.Validate(ds, specStr := checks); +OUTPUT(validationResult, {validationResult}, '~thor::stockdatavalidated', OVERWRITE, COMPRESSED); + + + + Validation.Fix() + + As correções são definidas em uma STRING delimitada por ponto e + vírgula. Cada correção deve estar no seguinte formato: + + <membership_test>:<fix_ecl> + + MEMBERSHIP_TEST é uma cláusula lógica que testa se um ou mais testes + da função VALIDATE() são verdadeiros para aquele registro. As entradas + aqui correspondem às entradas TEST_NAME da função VALIDATE() e podem + opcionalmente formar uma expressão booleana usando os operadores AND e OR. + Na sua forma mais simples, um MEMBERSHIP_TEST é apenas uma única entrada + TEST_NAME e será interpretado como o seguinte ECL: + + ('test_name' IN vaidation_results.violations) + + Expressões booleanas mais complexas usarão isso como base. Por + exemplo, o teste para "test_name_1 OR test_name_2" - ou seja, se uma das + duas verificações de validação falhar, execute o código FIX_ECL - seria + interpretado como o seguinte ECL: + + (('test_name_1' IN vaidation_results.violations) + OR + ('test_name_2' IN vaidation_results.violations))The NOT() + operator is also available, so testing for the absence of a validation is + supported. + + FIX_ECL é o código ECL que corrige o problema. A correção mais + básica é redefinindo um valor de campo (por exemplo, my_field := + new_value_expression). Se uma string literal for incluída na correção, os + apóstrofos deverão ser escapados porque ela está sendo definida dentro de + uma string. Se uma função REGEXFIND() ou REGEXREPLACE() for usada e + qualquer coisa dentro do padrão precisar ser escapada, a barra invertida + deverá ter escape duplo. ECL já requer um único escape (\\. ou \\d), mas + incluí-lo em um teste aqui significa que você terá que escapar duas vezes + da barra invertida: \\\\. ou \\\\d. + + O código ECL usado durante a correção é executado no escopo de um + único registro de dataset. Isso significa que a expressão pode fazer + referência a qualquer campo do registro. Não há necessidade de incluir p + refixos de escopo SELF ou LEFT ao citar um nome de campo de + dataset. + + FIX() importa a biblioteca Std ECL, portanto todas as funções da + biblioteca padrão estão disponíveis para uso em uma correção. Além disso, + como FIX() é uma macro de função, qualquer função que esteja no escopo + quando FIX() é chamada também pode ser usada em uma correção. + + FIX() também inclui algumas funções definidas internamente para uso + em suas correções como uma conveniência: + + + + + + OnlyDigits(s) + + Converta um único argumento em uma string UTF-8 e remova + tudo exceto dígitos numéricos + + + + OnlyDigits(s) + + Converta um único argumento em uma string UTF-8 e remova + tudo excetos caracteres alfabéticos + + + + WithoutPunct(s) + + Converta um único argumento em uma string UTF-8 e remova + todos os caracteres de pontuação + + + + Swap(f1, f2) + + Troque o conteúdo de dois campos nomeados + + + + SkipRecord() + + Remova o registro atual do dataset + + + + Aqui está um complexo exemplo: + + IMPORT DataPatterns; + +ValRec := RECORD UNSIGNED2 num_violations; SET OF STRING violations; END; + +LAYOUT := RECORD STRING tradedate; + STRING exchangecode; STRING stocksymbol; + STRING openingprice; + STRING highprice; + STRING lowprice; + STRING closingprice; + STRING sharestraded; + STRING sharevalue; + ValRec validationresults; +END; + +ds := DATASET('~thor::stockdatavalidated', LAYOUT, FLAT); + +repairs := 'LowPriceLessThanOrEqualToHighPrice:Swap(highprice, lowprice)' + + '; OpeningPriceValid AND ClosingPriceValid:SkipRecord()' + + '; OpeningPriceGreaterThanOne:opening_price := \'2\'' ; + +repairResults := DataPatterns.Validation.Fix(ds, specStr := repairs); +OUTPUT(repairResults, {repairResults}, '~thor::stockdatafixed', OVERWRITE, COMPRESSED); + + + + Profile() Testing + + Profile() Testing + Profile() Testing + + + O código de perfil de dados pode ser facilmente testado com o módulo + Testes incluído. hthor ou ROXIE devem ser usados para executar os testes, + simplesmente porque Thor leva um tempo relativamente longo para + executá-los. Aqui está como você invoca os testes: + + If the tests pass then the execution will succeed and there will be no output. These tests may take some time to execute on Thor. They run much faster on either hthor or ROXIE, due to the use of small inline datasets. + + Se os testes forem aprovados, a execução será bem-sucedida e haverá + um arquivo de saídasem saída. Esses testes podem levar algum tempo para + serem executados no Thor. Eles correm muito mais rápido no hthor ou no + ROXIE, devido ao uso de pequenos dataset. + + diff --git a/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsInECLWatch.xml b/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsInECLWatch.xml new file mode 100644 index 00000000000..604720676b4 --- /dev/null +++ b/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsInECLWatch.xml @@ -0,0 +1,197 @@ + + + + <emphasis>Padrões de Dados no ECL Watch </emphasis> + + Neste exemplo, usaremos um arquivo criado por GenData.ecl no Guia do + Programador. + + + + Tenha uma plataforma HPCC em execução. Esta pode ser uma + implantação de plataforma de HPCC Systems de nó único ou de vários + nós. + + + + Abra o ECL Watch em seu navegador usando o seguinte URL: + http://nnn.nnn.nnn.nnn:pppp (onde nnn.nnn.nnn.nnn é o endereço IP do seu + servidor ESP e pppp é a porta. A porta padrão é 8010 ). + + + + Abra a lista de arquivos lógicos clicando no terceiro ícone do + lado esquerdo. + + + + + + Encontre o arquivo desejado e clique nele para abrir a página + Detalhes dos arquivos lógicos. + + + + Nota: No ECL Watch, apenas + dataset com definições de registro conhecidas são suportados. Esta é + apenas uma limitação do ECL Watch. Você pode invocar + DataPatterns.Profile() programaticamente em qualquer tipo de conjunto de + dados válido, incluindo um arquivo de índice. + + + + Na primeira vez que você abre a guia Data Patterns, uma + notificação informa que uma análise não está disponível. Pressione o + botão Analyze para gerar uma análise de perfil. Depois de concluída, a + análise é exibida. + + + + + + Clique no título “Padrões de dados” na barra localizada próxima ao + topo da página. Clicar no título Data Patterns gerará um relatório do + arquivo de dados. + + + + Clique no título “Padrões de dados” na barra localizada próxima ao + topo da página. Clicar no título Data Patterns gerará um relatório do + arquivo de dados. + + Aqui está uma breve descrição de cada coluna: + + + + Digite informações, contagem de cardinalidade e & Contagem + preenchida. + + + + Min, Avg, Max Length (para atributos de string) ou Mean, Std. + Desvio, Quartis (para atributos numéricos). + + + + Curva de sino quartil e castiçal + + + + mostrado apenas para atributos numéricos. + + + + esta coluna não é exibida se não houver valores numéricos + atributos. + + + + + + Divisão de cardinalidade listada por contagem decrescente + + + + Esta coluna é mostrada para todos os tipos de dados escalares + de dados. + + + + esta coluna não é exibida se não houver valores numéricos + atributos. + + + + + + Padrões Populares + + + + Esta coluna é mostrada para todos os tipos de dados escalares + de dados. + + + + esta coluna não é exibida se não houver valores numéricos + atributos. + + + + + + For example: + + + + Conforme visto na seção “state”, a cardinalidade de cada estado é + exibida. O detalhamento da cardinalidade é mostrado para atributos com baixo + número de valores exclusivos e não nulos, mostrando cada valor e o número de + registros que contêm o valor. + + Nota: O parâmetro lcbLimit rege o que + significa “número baixo” + + Neste exemplo, a cardinalidade para “NY” é 7%, o que significa que 7% + de registros contêm o valor “NY”. + + O “Min Length" exibe o comprimento mais curto de um valor, onde nulo + os valores são ignorados. Em tipos de dados SET, entretanto, “Min Length'' + pode exibir o menor número de elementos do conjunto. + + O “Max Length” exibe o maior comprimento de um valor, onde null + valores também são ignorados. Os tipos de dados SET exibem o maior número de + elementos do conjunto. + + Para a seção “state”, os comprimentos mínimo e máximo têm o valor “2”, + uma vez que todas as abreviações de estado consistem em 2 letras na + string. + + O “Avg Length” exibe o comprimento médio de um valor quando expresso. + Nos tipos de dados SET, é o número médio de elementos encontrados no + conjunto. + + Optimize Results + + A otimização dos resultados atribui à string o valor mais eficiente + com base no comprimento máximo contido na seção específica do dataset, + reescrevendo o código ECL. O resultado é um tamanho de arquivo + reduzido. + + Para otimizar os resultados, siga as etapas abaixo: + + + + Escolha um arquivo para executar os Padrões de Dados. + + + + Clique no botão “Optimize” localizado próximo ao topo da página. + Clicar no botão otimizar fará com que um pop-up apareça. + + + + + + Selecione um alvo no menu suspenso. + + + + + + Clique no botão "Optimize". + + + + Verifique o arquivo de dados otimizado, o nome do arquivo original + com o sufixo " :optimized ". Observe que o tamanho do arquivo é + menor. + + + + Clique a aba "Data Patterns". A string agora tem um valor novo e + otimizado. + + + diff --git a/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsIntro.xml b/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsIntro.xml new file mode 100644 index 00000000000..e679b22135d --- /dev/null +++ b/docs/PT_BR/DataPatterns/DataPatternsMods/DataPatternsIntro.xml @@ -0,0 +1,63 @@ + + + + <emphasis>Introdução ao Padrão de Dados</emphasis> + + Data Patterns é um pacote de biblioteca e ECL que serve principalmente + como uma ferramenta de criação de perfil de dados para fornecer uma análise + de um dataset no HPCC. + + Em muitos lugares deste documento, "Padrões de Dados" é usado para + significar "perfil de dados". + + Os Padrões de Dados permitem ver se os valores nos campos do dataset + são representados de maneira ideal por seu tipo de dados e outras + informações gerais, como valores extremos, médias e outras constantes + numéricas. Um registro é fornecido para cada campo analisado. + + A análise fornecida pela ferramenta permite compreender o sentido + geral de um dataset. + + Os padrões de dados podem ser invocados de três maneiras: + + + + Dentro do ECL Watch + + + + Usando o módulo Std.DataPatterns no ECL + + + + Usando o pacote de padrões de dados. + + + + As instalações têm diferenças. O uso de padrões de dados no ECL watch + oferece suporte apenas à criação de perfil e otimização de dados, mas inclui + visualizações automaticamente. A Biblioteca Padrão ECL não oferece suporte a + visualizações. + + Existem numerosos parâmetros para controlar a saída e análise: + + + + Analisa todas as linhas de um conjunto de dados ou apenas uma + amostra + + + + Analisa todos os campos ou apenas alguns campos + + + + Habilitar apenas verificações de perfil especificadas + + + + Especifique contagens de valores retornados. + + + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR-includer.xml b/docs/PT_BR/ECLLanguageReference/ECLR-includer.xml index 3497ccfad61..5ebf6ad82be 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR-includer.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR-includer.xml @@ -45,10 +45,13 @@ xpointer="xpointer(//*[@id='DateVer'])" xmlns:xi="http://www.w3.org/2001/XInclude"/> - © 2021 HPCC Systems®. Todos os - direitos reservados. Exceto onde indicado de outra forma, o conteúdo do - ECL Language Reference (Referência a Linguagem ECL) é licenciado sob - licença pública da Creative Commons. + © HPCC + Systems®. Todos os direitos reservados. Exceto + onde indicado de outra forma, o conteúdo do ECL Language Reference + (Referência a Linguagem ECL) é licenciado sob licença pública da Creative + Commons. HPCC Systems® @@ -72,7 +75,9 @@ - <emphasis role="bold">ECL Básico</emphasis> + + <emphasis role="bold">ECL Básico</emphasis> + + + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStrucSpecial.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStrucSpecial.xml index 08657071032..36e88658d93 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStrucSpecial.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStrucSpecial.xml @@ -229,7 +229,7 @@ Exemplo: - EXPORT NeedC(INTEGER len) := TYPE + EXPORT NeedC(INTEGER len) := TYPE EXPORT STRING LOAD(STRING S) := 'C' + S[1..len]; EXPORT STRING STORE(STRING S) := S[2..len+1]; EXPORT INTEGER PHYSICALLENGTH(STRING S) := len; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStruct.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStruct.xml index 07a85d58c32..943ae7c7a5a 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStruct.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/AlienData-TypeStruct.xml @@ -49,13 +49,19 @@ parâmetros, basta anexá-los ao TypeName usado na estrutura RECORD para definir o tipo de valor para o campo. + Tipos de dados alienígenas (TYPE) só devem ser usados ao acessar dados + externos arquivos de dados. É muito mais eficiente usar os tipos nativos + para fins gerais. em processamento. Em particular, algumas otimizações para + projetar e filtrar arquivos remotamente não são suportados em tipos de dados + estranhos. + Uma estrutura TYPE pode conter apenas definições de função contidas na lista de Funções especiais disponíveis (consulte Funções especiais da estrutura TYPE ). Exemplo: - STRING4 Rev(STRING4 S) := S[4] + S[3] + S[2] + S[1]; + STRING4 Rev(STRING4 S) := S[4] + S[3] + S[2] + S[1]; EXPORT ReverseString4 := TYPE EXPORT STRING4 LOAD(STRING4 S) := Rev(S); EXPORT STRING4 STORE(STRING4 S) := Rev(S); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-Constants.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-Constants.xml index 83e3afae3dc..481c80e7ab5 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-Constants.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-Constants.xml @@ -95,7 +95,7 @@ MyString2 := U'abcd\353'; // becomes 'abcdë'' As constantes de string Unicode Unicode string devem começar com um caractere - "U". Os caracteres entre aspas são codificados em utf8 e o tipo de + "U". Os caracteres entre aspas são codificados em utf16 e o tipo de constante é UNICODE. MyUnicodeString1 := U'abcd'; // same as: (UNICODE)'abcd' @@ -115,14 +115,40 @@ MyUnicodeString3 := U'abcd\u00EB'; // becomes 'abcdë' devem começar com um caractere "V". O byte nulo de finalização é implícito e o tipo da constante é VARSTRING. - MyVarString := V'abcd'; // same as: (VARSTRING)'abcd' - - As constantes de string QSTRING - QSTRING string constants - devem começar com um caractere "Q". O byte nulo - de finalização é implícito e o tipo da constante é VARSTRING. - - MyQString := Q'ABCD'; // same as: (QSTRING)'ABCD' + + String Multilinha + + A multiline string begins and ends with three single quotes + ('''). + + Quaisquer aspas, tabulações ou novas linhas entre aspas triplas + são parte da string. Embora você possa usar o caractere \ escape dentro + de um string multilinha, o escape não é necessário (exceto para o \ + personagem). O caractere \ no final de uma linha em uma string + multilinha remove o fim da linha e une as duas linhas. + + Examplos: + + 'Single\n quotes'; +u'Can\'t be multiline and must escape embedded single quotes'; +u8'€'; +v'Can use various prefixes'; +d'7172737475'; +Q'ABCDE'; + +'''Triple +quotes can have embedded newlines, but also \ +support \n escape sequence'''; +'''Single quotes inside a multiline string don't need escaping'''; +u'''Unicode triple quotes +should be the same, and also \ +support \n escape sequence'''; +u'''Don't have to be multiline and need not escape embedded quotes (but \'can' if they want)'''; +u8'''€'''; +v'''Can use same prefixes as single'''; +d'''7172737475'''; +Q'''ABCDE'''; + @@ -263,12 +289,22 @@ MyDec2 := 3.14159265358979323846d // value of MyDec2 is the DECIMAL - Exemplo: + Exemplos: + + // Any modules referenced inside the condition must be declared outside of the condition +// This will avoid syntax errors +prod_thor_dali := _Control.IPAddress.prod_thor_dali; + #IF(_TARGET_PLATFORM_ in ['thorlcr']) + Output('thor'); + prod_thor_dali; + #ELSE + Output('not thor'); + #END - IMPORT STD; +//Second example +IMPORT STD; STRING14 fGetDateTimeString() := - #IF(__ECL_VERSION_MAJOR__ > 5) or ((__ECL_VERSION_MAJOR__ = 5) - AND (__ECL_VERSION_MINOR__ >= 2)) + #IF(__ECL_VERSION_MAJOR__ > 5) or ((__ECL_VERSION_MAJOR__ = 5) AND (__ECL_VERSION_MINOR__ >= 2)) STD.Date.SecondsToString(STD.Date.CurrentSeconds(true), '%Y%m%d%H%M%S'); #ELSE FUNCTION @@ -280,13 +316,59 @@ MyDec2 := 3.14159265358979323846d // value of MyDec2 is the DECIMAL time(&timeinsecs); localtime_r(&timeinsecs,&localt); char temp[15]; - strftime(temp , 15, "%Y%m%d%H%M%S", &localt); - // Formats the localtime to YYYYMMDDhhmmss + strftime(temp , 15, "%Y%m%d%H%M%S", &localt); // Formats the localtime to YYYYMMDDhhmmss strncpy(__result, temp, 14); ENDC++; RETURN fGetDimeTime(); END; #END; + +// Example using __CONTAINERIZED__ +over := 'overwrite=1 '; +repl := 'replicate=1 '; +action := 'action=spray '; +srcplane :='srcplane=mydropzone '; +srcfile := 'srcfile=originalperson '; +dstname:='dstname=JD::originalperson ' ; +//dstcluster:= 'dstcluster=data '; // for containerized +//dstcluster:= 'dstcluster=mythor '; // for bare-metal +dstcluster := IF(__CONTAINERIZED__, 'dstcluster=data ','dstcluster=mythor '); +fmt:= 'format=fixed '; +recsize:='recordsize=124 '; +cmd := over + repl + action + srcplane + srcfile + dstname + + dstcluster + fmt + recsize; +STD.File.DfuPlusExec(cmd); + + Expressões Runtime + + As seguintes constantes do sistema + runtime + são avaliados em tempo de execução. Tecnicamente, estes são + tempos de execução expressões, não constantes. Portanto, eles não podem + ser usados em condições condicionais. código que requer uma constante. + + expressões runtime + + + + + + + + + + + __PLATFORM__ + __PLATFORM__ + + + Uma STRING que representa o tipo de mecanismo onde o a + consulta está sendo executada. Os valores possíveis são: + 'roxie', 'hthor' ou 'thorlcr'. + + + + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-EnvironmentVariables.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-EnvironmentVariables.xml new file mode 100644 index 00000000000..b3b256c83d0 --- /dev/null +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Basics-EnvironmentVariables.xml @@ -0,0 +1,33 @@ + + + + Variáveis de Ambiente + + Variáveis de ambiente armazenam dados sobre a plataforma atual + ambiente. Você pode recuperar o valor de uma variável de ambiente usando o + função integrada GETENV(). + + + HPCC_DEPLOYMENT + + Em uma implantação do Kubernetes, essa variável é preenchida + automaticamente com o nome do gráfico Helm. Por exemplo, se implantado + usando: + + helm install myenv1 hpcc/hpcc + + então a variável HPCC_DEPLOYMENT conterá o valor: meuenv1. + + Para um ambiente bare-metal, esse valor pode ser definido em + Environment.conf, adicionando: + + deploymentName=myenv1 + + Você pode recuperar esse valor usando: + + OUTPUT(GETENV('HPCC_DEPLOYMENT', 'unknown')); + + Veja também: GETENV + + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ABS.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ABS.xml index d29e37fd416..23a42713288 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ABS.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ABS.xml @@ -41,7 +41,9 @@ Exemplo: - AbsVal1 := ABS(1); // returns 1 + AbsVal1 := ABS(1); // returns 1 AbsVal2 := ABS(-1); // returns 1 +OUTPUT(AbsVal1); +OUTPUT(AbsVal2); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ACOS.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ACOS.xml index 2cffc685d14..7a4f6a55f84 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ACOS.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ACOS.xml @@ -1,4 +1,4 @@ - + @@ -13,15 +13,16 @@ - + - + cosine - O valor coseno REAL para o qual o arco coseno deve ser localizado. + O valor coseno REAL para o qual o arco coseno deve ser + localizado. @@ -33,12 +34,19 @@ - A função ACOS retorna o arco coseno (inverso) do coseno, em radianos. + A função ACOS retorna o arco coseno + (inverso) do coseno, em radianos. Exemplo: - ArcCosine := ACOS(CosineAngle); + Deg2Rad := 0.0174532925199; //number of radians in a degree +cosineAngle := 0.75; +acos(cosineAngle) * Deg2Rad; - Ver também: COS, SIN, TAN, ASIN, ATAN, COSH, SINH, TANH + Ver também: COS, SIN, TAN, ASIN, ATAN, COSH, SINH, TANH diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AGGREGATE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AGGREGATE.xml index 1472f1f9a9d..06f199bf404 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AGGREGATE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AGGREGATE.xml @@ -15,8 +15,8 @@ RIGHT1 ,RIGHT2 RIGHT2 - ) ] [, groupingfields - ] [, LOCAL + ) | groupingfields ] [, LOCAL LOCAL | FEW FEW @@ -247,38 +247,48 @@ maintransform. Se ele não conseguir fazer isso, o usuário precisará especificar um. - inRecord := RECORD + //Example 1: Produce a list of box contents by concatenating a string: +IMPORT Std; +inRec := RECORD UNSIGNED box; - STRING text{MAXLENGTH(10)}; + STRING text{MAXLENGTH(100)}; END; -inTable := DATASET([{1,'Fred'},{1,'Freddy'}, - {2,'Freddi'},{3,'Fredrik'},{1,'FredJon'}], inRecord); - -//Example 1: Produce a list of box contents by concatenating a string: - -outRecord1 := RECORD +inds := DATASET([{1,'Fred1'},{1,'Freddy1'},{1,'FredJon1'}, + {3,'Fred3'},{3,'Freddy3'},{3,'FredJon3'}, + {4,'Fred4'},{4,'Freddy4'},{4,'FredJon4'}, + {2,'Freddi'},{2,'Fredrik'}], inRec,DISTRIBUTED); +outRec := RECORD UNSIGNED box; STRING contents{MAXLENGTH(200)}; END; -outRecord1 t1(inRecord l, outRecord1 r) := TRANSFORM +outRec t1(inds l, outRec r) := TRANSFORM SELF.box := l.box; - SELF.contents := r.contents + IF(r.contents <> '', ',', '') + l.text; + SELF.contents:= r.contents +IF(r.contents <> '', ',', '') +l.text +'-' +(Std.System.ThorLib.Node()+1); END; -outRecord1 t2(outRecord1 r1, outRecord1 r2) := TRANSFORM +outRec t2(outRec r1, outRec r2) := TRANSFORM SELF.box := r1.box; - SELF.contents := r1.contents + ',' + r2.contents; + SELF.contents := r1.contents + '::' + r2.contents; END; -OUTPUT(AGGREGATE(inTable, outRecord1, t1(LEFT, RIGHT), t2(RIGHT1, RIGHT2), LEFT.box)); - -//This example could eliminate the merge transform if the SELF.contents expression in -//the t1 TRANSFORM were simpler, like this: -// SELF.contents := r.contents + ',' + l.text; -//which would make the AGGREGATE function like this: -// OUTPUT(AGGREGATE(inTable, outRecord1, t1(LEFT, RIGHT), LEFT.box)); - +OUTPUT(AGGREGATE(inds, outRec, t1(LEFT, RIGHT), t2(RIGHT1, RIGHT2), LEFT.box)); +//because there is a "group by" field, this will never call the second TRANSFORM +//because "group by" puts all grouped recs on a single node +//and it produces one result rec for each unique "group by" value + +OUTPUT(AGGREGATE(inds, outRec, t1(LEFT, RIGHT), t2(RIGHT1, RIGHT2))); +//without the "group by" field, this calls the second TRANSFORM on a multi-node cluster +//and the second TRANSFORM produces a single result record after merging the results from +//each node + //Example 2: A PIGMIX style grouping operation: +inRecord := RECORD + UNSIGNED box; + STRING text{MAXLENGTH(10)}; +END; +inTable := DATASET([{1,'Fred'},{1,'Freddy'}, + {2,'Freddi'},{3,'Fredrik'},{1,'FredJon'}], inRecord); + outRecord2 := RECORD UNSIGNED box; DATASET(inRecord) items; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ALLNODES.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ALLNODES.xml index 05168486a23..e219813907c 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ALLNODES.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ALLNODES.xml @@ -1,4 +1,4 @@ - + @@ -13,33 +13,38 @@ - + - + operation - O nome de um atributo ou código em linha que resulta em um DATASET ou INDEX. + O nome de um atributo ou código em linha que resulta em um + DATASET ou INDEX. Return: - ALLNODES retorna um conjunto de registros ou índice. + ALLNODES retorna um conjunto de registros ou + índice. - A função ALLNODES especifica que a operação é realizada em paralelo em todos os nós. - Essa função está disponível para uso apenas no Roxie. + A função ALLNODES especifica que a + operação é realizada em paralelo em todos os nós. + Essa função está disponível para uso apenas no + Roxie. Exemplo: ds := ALLNODES(JOIN(SomeData,LOCAL(SomeIndex), LEFT.ID = RIGHT.ID)); - Ver também: THISNODE, LOCAL, NOLOCAL + Ver também: THISNODE, LOCAL, NOLOCAL diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-APPLY.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-APPLY.xml index a7e0772f4fb..e88adb17073 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-APPLY.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-APPLY.xml @@ -149,7 +149,7 @@ Exemplo: - EXPORT x := SERVICE + EXPORT x := SERVICE echo(const string src):library='myfuncs',entrypoint='rtlEcho'; END; APPLY(person,x.echo(last_name + ':' + first_name)); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASCII.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASCII.xml index da1eb82dcdd..2a7e17865a9 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASCII.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASCII.xml @@ -1,4 +1,4 @@ - + @@ -8,66 +8,92 @@ ASCII ASCII function - (recordset - [, UNORDERED | ORDERED( bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] - ) + (recordset [, UNORDERED | ORDERED( bool + ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ + ( numthreads ) ] ] [, + ALGORITHM( name ) + ] ) - + - + recordset - O conjunto de registros para processamento. Pode ser o nome de um dataset ou de um recordset derivado de algumas condições de filtro, ou qualquer expressão que resulte em um recordset derivado. + O conjunto de registros para processamento. Pode ser o nome + de um dataset ou de um recordset derivado de algumas condições de + filtro, ou qualquer expressão que resulte em um recordset + derivado. + UNORDERED - Opcional. Especifica que a ordem do registro de resultado não é importante. + Opcional. Especifica que a ordem do registro de resultado + não é importante. + ORDERED - Especifica a importância da ordem do registro de resultado. + Especifica a importância da ordem do registro de + resultado. + bool - Quando for “False” (Falso), especifica que a ordem do registro de resultado não é importante. Quando for “True’ (Verdadeiro), especifica a ordem padrão do registro de resultado. + Quando for “False” (Falso), especifica que a ordem do + registro de resultado não é importante. Quando for “True’ + (Verdadeiro), especifica a ordem padrão do registro de + resultado. + STABLE - Opcional. Especifica que a ordem do registro de entrada é importante. + Opcional. Especifica que a ordem do registro de entrada é + importante. + UNSTABLE - Opcional. Especifica que a ordem do registro de entrada não é importante. + Opcional. Especifica que a ordem do registro de entrada não + é importante. + PARALLEL Opcional. Tenta avaliar essa atividade em paralelo. + numthreads - Opcional. Tenta avaliar essa atividade usando numthreads threads + Opcional. Tenta avaliar essa atividade usando + numthreads threads + ALGORITHM - Opcional. Substitui o algoritmo usado para essa atividade. + Opcional. Substitui o algoritmo usado para essa + atividade. + name - O algoritmo a ser usado para essa atividade. Precisa fazer parte da lista de algoritmos compatíveis com as opções STABLE e UNSTABLE da função SORT. + O algoritmo a ser usado para essa atividade. Precisa fazer + parte da lista de algoritmos compatíveis com as opções STABLE e + UNSTABLE da função SORT. @@ -79,12 +105,13 @@ - A função ASCII retorna o - recordset com todos os campos da STRING traduzidos do EBCDIC para ASCII. + A função ASCII retorna o + recordset com todos os campos da STRING traduzidos do + EBCDIC para ASCII. Exemplo: - AsciiRecs := ASCII(SomeEBCDICInput); + AsciiRecs := ASCII(SomeEBCDICInput); Ver também: EBCDIC diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASIN.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASIN.xml index 42fac915bc1..caf9279616b 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASIN.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASIN.xml @@ -1,4 +1,4 @@ - + @@ -13,15 +13,16 @@ - + - + sine - O valor seno REAL para o qual o arco seno deve ser localizado. + O valor seno REAL para o qual o arco seno deve ser + localizado. @@ -33,11 +34,20 @@ - A função ASIN retorna o acro seno (inverso) do seno, em radianos. + A função ASIN retorna o acro seno + (inverso) do seno, em radianos. Exemplo: - ArcSine := ASIN(SineAngle); - - Ver também: ACOS, COS, SIN, TAN, ATAN, COSH, SINH, TANH + Rad2Deg := 57.295779513082; //number of degrees in a radian +SineAngle := .25; +ArcSine := ASIN(SineAngle)*Rad2Deg; +OUTPUT(ArcSine); // degrees + + + Ver também: ACOS, COS, SIN, TAN, ATAN, COSH, SINH, TANH diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASSERT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASSERT.xml index bc27e32b1a7..60b379e5a90 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASSERT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASSERT.xml @@ -166,7 +166,7 @@ Exemplo: - val1 := 1; + val1 := 1; val2 := 1; val3 := 2; val4 := 2 : STORED('val4'); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASTRING.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASTRING.xml index 14252feac21..a87f3f4b0ca 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASTRING.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ASTRING.xml @@ -41,13 +41,14 @@ Exemplo: - INTEGER1 MyInt := 65; //MyInt is an integer whose value is 65 + INTEGER1 MyInt := 65; //MyInt is an integer whose value is 65 MyVal1 := ASSTRING(MyInt); //MyVal1 is "A" (ASCII 65) +OUTPUT(MyVal1); // this is directly equivalent to: // STRING1 MyVal1 := TRANSFER(MyInt,STRING1);INTEGER1 MyVal3 := (INTEGER)MyVal1; //MyVal3 is 0 (zero) because "A" is not a numeric character Ver também: TRANSFER, Conversão de tipo + linkend="Type_Casting">Conversão do Type diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN.xml index bcef4b0c582..8f4967dfd61 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN.xml @@ -1,4 +1,4 @@ - + @@ -13,15 +13,16 @@ - + - + tangent - O valor REAL da tangente para o qual o arco tangente deve ser localizado. + O valor REAL da tangente para o qual o arco tangente deve + ser localizado. @@ -33,11 +34,19 @@ - A função ATAN retorna o arco tangente (inverso) da tangente, em radianos. + A função ATAN retorna o arco + tangente (inverso) da tangente, em radianos. Exemplo: - ArcTangent := ATAN(TangentAngle); + Rad2Deg := 57.295779513082; //number of degrees in a radian +TangentAngle := 57.74; +ArcTangent := ATAN(TangentAngle) * Rad2Deg; +OUTPUT(ArcTangent); - Ver também: ATAN2, ACOS, COS, ASIN, SIN, TAN, COSH, SINH, TANH + Ver também: ATAN2, ACOS, COS, ASIN, SIN, TAN, COSH, SINH, TANH diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN2.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN2.xml index 203f063cc7c..7ece64a3b1a 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN2.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ATAN2.xml @@ -1,4 +1,4 @@ - + @@ -7,15 +7,15 @@ ATAN2 ATAN2 - - ( + () - + - + @@ -39,14 +39,26 @@ - A função ATAN2 retorna o arco tangente (inverso) da tangente calculada, em radianos. Isso é semelhante à função ATAN + A função ATAN2 retorna o arco + tangente (inverso) da tangente calculada, em radianos. Isso é semelhante à + função ATAN ATAN function - , porém mais preciso e lida com situações onde x ou y é igual a zero. - x ou y o padrão é zero. + , porém mais preciso e lida com situações onde x ou y é igual + a zero. x ou y o padrão é + zero. Exemplo: - ArcTangent := ATAN2(TangentNumerator, TangentDenominator); + // get the value of tan-1(5.0 / 2.0) +TangentNumerator := 5.0; +TangentDenominator:=2.0; +ArcTangent := ATAN2(TangentNumerator, TangentDenominator); +OUTPUT(ArcTangent); //1.190289949682532 + - Ver também: ATAN, ACOS, COS, ASIN, SIN, TAN, COSH, SINH, TANH + Ver também: ATAN, ACOS, COS, ASIN, SIN, TAN, COSH, SINH, TANH diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AVE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AVE.xml index 87e7cf643cd..af4e54e8dd7 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AVE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-AVE.xml @@ -148,10 +148,11 @@ Exemplo: - AvgBal1 := AVE(Trades,Trades.trd_bal); -AvgVal2 := AVE(4,8,16,2,1); //returns 6.2 + AvgVal1 := AVE(4,8,16,2,1); //returns 6.2 SetVals := [4,8,16,2,1]; -AvgVal3 := AVE(SetVals); //returns 6.2 +AvgVal2 := AVE(SetVals); //returns 6.2 +OUTPUT(AvgVal1); +OUTPUT(AvgVal2); Ver também: MIN, [, options ] ); - BUILD( library - ); + + BUILD( - + library + + ); + + + + @@ -43,7 +49,9 @@ - attrname + + attrname + Opcional. O nome da ação, que transforma a ação em definição de atributo, consequentemente não é executado até que @@ -51,7 +59,9 @@ - baserecset + + baserecset + O conjunto de registro de dados para qual o arquivo de índice será criado. Pode ser um conjunto de registros derivado dos @@ -60,50 +70,75 @@ - indexrec - - Opcional. A estrutura RECORD dos campos no indexfile que - contém informações-chave e de posição do arquivo a serem - mencionadas no baserecset. Os nomes e tipos - de campos devem corresponder aos campos de baserecset - (os tipos de campos REAL e DECIMAL não são - permitidos). Também pode conter campos adicionais que não estejam - presentes no baserecset Se omitido, todos os - campos em baserecset serão usados. O último - campo deve ter o nome de um campo UNSIGNED8 definido usando a - função {VIRTUAL(filepposition)} na declaração DATASET do + + indexrec + + + opcional. A estrutura RECORD dos campos no arquivo + indexfile que contém informações de posição e + chave para referência no baserecset. Os nomes + e tipos de campos devem corresponder aos campos + baserecset (campos de tipo de valor REAL e + DECIMAL não são suportados). Também pode conter campos adicionais + não presentes no baserecset (campos + computados). Se omitido, todos os campos do + baserecset serão usados. O último campo deve + ser o nome de um campo UNSIGNED8 definido usando o modificador de + campo {VIRTUAL(filepposition)} na declaração DATASET do baserecset. - keys - - A estrutura RECORD dos campos no - indexfile que contém informações-chave e de - posição do arquivo a serem mencionadas no - baserecset. Os nomes e tipos de campos devem - corresponder aos campos de baserecset (os - tipos de campos REAL e DECIMAL não são permitidos). Também pode - conter campos adicionais que não estejam presentes no - baserecset. Se omitido, todos os campos em - baserecset serão usados. + + keys + + + A estrutura RECORD de campos-chave que fazem referência ao + baserecset (os "termos de pesquisa" para o + INDEX). Os campos-chave podem ser campos + baserecset ou campos computados. Os tipos + REAL e DECIMAL não são suportados como campos de "termo de + pesquisa". Se omitido, todos os campos do + baserecset serão usados. Essa estrutura + RECORD normalmente é definida inline no BUILD usando chaves ({}), + mas também pode ser uma estrutura RECORD definida separadamente. + Se a estrutura RECORD for definida separadamente, ela deverá + atender aos mesmos requisitos usados pela função TABLE() (a + estrutura RECORD deve definir o tipo, nome e fonte dos dados para + cada campo), caso contrário, a ação BUILD não verificará a + sintaxe. - payload - - A estrutura RECORD do indexfile que - contém campos adicionais não usados como chaves. Se o nome do - baserecset estiver na estrutura, especificará - "todos os outros campos ainda não nomeados no parâmetro Keys". - Pode conter campos que não estejam presentes no - baserecset Esses campos não ocupam espaço nos - nós não folha do índice e não podem ser citados em uma cláusula de - filtro KEYED() + + payload + + + A estrutura RECORD do indexfile que + contém campos adicionais não usados como "termos de busca". Isso + pode conter campos do baserecordset e/ou + campos computados. Se o nome do baserecset + está nesta estrutura, especifica "todos os outros campos ainda não + nomeados nas chaves parâmetro" são adicionados. Os campos de carga + útil não ocupam espaço em nós non-leaf do índice e não podem ser + referenciados em uma Cláusula de filtro KEYED(). Qualquer campo + com o modificador {BLOB} (para permitir mais de 32K de dados por + entrada de índice) é armazenado dentro do + indexfile, mas não com o resto do registro; + acessar os dados BLOB requer uma busca adicional. Essa estrutura + RECORD é normalmente definida em linha dentro do INDEX usando + chaves ({}), mas também pode ser uma estrutura REGISTRO definida + separadamente. Se a estrutura RECORD for definida separadamente, + ela deve atender aos mesmos requisitos usados pela função TABLE() + (a estrutura RECORD deve definir o tipo, nome e fonte dos dados de + cada campo), caso contrário a ação BUILD não verificará a + sintaxe. - indexfile + + indexfile + Uma constante da string que contém o nome do arquivo lógico do índice a ser criado. Consulte a seção Escopo e Nomes de @@ -112,25 +147,41 @@ - options + + options + Opcional. Uma ou mais das opções listadas abaixo. - indexdef + + indexdef + O nome do atributo INDEX a ser compilado. - library + + dataset + + + O nome do DATASET a ser usado quando você omite a base + parâmetro do conjunto de dados da definição INDEX. + + + + + library + O nome de um atributo MODULE com a opção LIBRARY . - + + As primeiras quatro formas da ação BUILD criam arquivos de índice. Os índices são compactados @@ -150,71 +201,105 @@ As opções a seguir estão disponíveis em todas as três formas BUILD de INDEX (apenas): - [, CLUSTER - CLUSTER - ( target )] [, SORTED - SORTED - ] [, DISTRIBUTE - DISTRIBUTE - ( key - ) [ , MERGE - MERGE - ] ][, DATASET - DATASET - ( basedataset )] [, OVERWRITE - OVERWRITE - ] [, UPDATE - UPDATE - ][,EXPIRE - EXPIRE - ( [days] ) ][, FEW - FEW - ] [, FILEPOSITION(false) - FILEPOSITION - ] [, LOCAL - LOCAL - ] [, NOROOT - NOROOT - ] [, DISTRIBUTED - DISTRIBUTED - ][, COMPRESSED - COMPRESSION - ( LZW - LZW - | ROW - ROW - | FIRST - FIRST - ) ] [, WIDTH - WIDTH - ( nodes ) ] [, DEDUP - DEDUP - ][,SKEW - SKEW - (limit[, target] ) [, THRESHOLD - THRESHOLD - (size) - ] ] [, MAXLENGTH - MAXLENGTH - [(value)] ] ][, UNORDERED | ORDERED( bool - ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ - ( numthreads ) ] ] - [, ALGORITHM( name ) - ][, SET ( option, value ) ] - - + + [, CLUSTER + CLUSTER + ( + + target + + )] [, SORTED + SORTED + ] [, DISTRIBUTE + DISTRIBUTE + ( + + key + + ) [ , MERGE + MERGE + ] ] + + [, DATASET + DATASET + ( + + basedataset + + )] [, OVERWRITE + OVERWRITE + ] + + [, UPDATE + UPDATE + ][,EXPIRE + EXPIRE + ( [days] ) ][, FEW + FEW + ] [, FILEPOSITION(false) + FILEPOSITION + ] [, LOCAL + LOCAL + ] [, NOROOT + NOROOT + ] [, DISTRIBUTED + DISTRIBUTED + ] + + [, COMPRESSED + COMPRESSION + ( LZW + LZW + | ROW + ROW + | FIRST + FIRST + ) ] [, WIDTH + WIDTH + ( + + nodes + + ) ] [, DEDUP + DEDUP + ][,SKEW + SKEW + (limit[, target] ) [, THRESHOLD + THRESHOLD + (size) ] ] [, MAXLENGTH + MAXLENGTH + [(value)] ] ] + + [, UNORDERED | ORDERED( + + bool + + ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ + ( + + numthreads + + ) ] ] [, ALGORITHM( + + name + + ) ][, SET ( + + option, value + + ) ] + + + + @@ -222,7 +307,9 @@ - CLUSTER + + CLUSTER + Especifica o uso da indexfile especifica a gravação do nome de arquivo para a lista @@ -236,7 +323,9 @@ - target + + target + Uma lista de constantes de string delimitada por vírgulas que contém os nomes dos clusters no qual o arquivo @@ -251,7 +340,9 @@ - SORTED + + SORTED + Especifica que baserecset já foi classificado, significando que a classificação automática com @@ -260,28 +351,36 @@ - DISTRIBUTE + + DISTRIBUTE + Especifica a compilação do indexfile com base na distribuição da chave. - key + + key + O nome de uma definição do atributo INDEX existente. - MERGE + + MERGE + Opcional. Especifica a fusão do índice resultante na chave especificada. - DATASET + + DATASET + Necessário apenas quando baserecset for o resultado de uma operação (como um JOIN) cujo resultado a @@ -293,28 +392,36 @@ - basedataset + + basedataset + O nome do atributo DATASET a partir do qual baserecset é derivado. - OVERWRITE + + OVERWRITE + Especifica a substituição do indexfile caso ele exista. - UPDATE + + UPDATE + specifica que o arquivo deve ser regravado apenas se houver alteração nos dados de código ou de entrada. - EXPIRE + + EXPIRE + Opcional. Especifica que se trata de um arquivo temporário que pode ser removido automaticamente após um @@ -323,7 +430,9 @@ - FILEPOSITION + + FILEPOSITION + Opcional. Se o indicador for FALSE, impede que o campo “fileposition” implícito seja criado e não @@ -332,14 +441,18 @@ - flag + + flag + Opcional. TRUE ou FALSE, indicando se o campo “fileposition” implícito será ou não criado. - days + + days + Opcional. O número de dias contados a partir da última leitura do arquivo em que o arquivo será automaticamente @@ -347,7 +460,9 @@ - FEW + + FEW + Especifica que o osindexfile foi criado como um só arquivo de parte única. Usado apenas para @@ -357,7 +472,9 @@ - indexdef + + indexdef + O nome de uma definição do atributo INDEX existente que fornece os parâmetros baserecset, @@ -366,7 +483,9 @@ - LOCAL + + LOCAL + Especifica que a operação é realizada em cada nó de supercomputador de forma independente, sem exigir interação com @@ -375,7 +494,9 @@ - NOROOT + + NOROOT + Especifica que o índice não é classificado em nível global e que não há índice de raiz para indicar qual parte do @@ -384,7 +505,9 @@ - DISTRIBUTED + + DISTRIBUTED + Especifica ambas as opções LOCAL e NOROOT (congruentes com a opção DISTRIBUTED em uma declaração INDEX, a qual @@ -393,7 +516,9 @@ - COMPRESSED + + COMPRESSED + Especifica o tipo de compactação usado. Se omitido, o padrão usado é LZW, uma variante do algoritimo Lempel-Ziv-Welch. @@ -408,7 +533,9 @@ - WIDTH + + WIDTH + Especifica a gravação do indexfile para um número diferente de partes de arquivos físicos que o @@ -421,7 +548,9 @@ - nodes + + nodes + O número de partes do arquivo físico a serem gravadas. Se estiver definido para (1), essa opção operará exatamente da @@ -429,14 +558,18 @@ - DEDUP + + DEDUP + Especifica que as entradas duplicadas são eliminadas do INDEX. - SKEW + + SKEW + Indica que você sabe que os dados não serão espalhados uniformemente entre os nós (serão distorcidos e você opta por @@ -445,39 +578,49 @@ - limit + + limit + Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima de distorção a ser permitida antes que a - tarefa falhe (a distorção padrão é 1,0 / <número de escravos - no cluster>). + tarefa falhe (a distorção padrão é 1,0 / <número de + secundários no cluster>). - target + + target + Opcional. Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima de distorção desejada a ser - permitida (a distorção padrão é 1,0 / <número de escravos no - cluster>). + permitida (a distorção padrão é 1,0 / <número de secundários + no cluster>). - THRESHOLD + + THRESHOLD + Indica o tamanho mínimo de uma única parte antes que o limite SKEW seja aplicado. - size + + size + Um valor inteiro indicando o número mínimo de bytes para uma parte única. O padrão é 1. - MAXLENGTH + + MAXLENGTH + Opcional. Esta opção é usada para criar índices que são compatíveis com versões anteriores às versões 3.0. Especifica o @@ -489,7 +632,9 @@ - value + + value + Opcional. Um valor inteiro que indica o comprimento máximo. Se omitido, o tamanho máximo será calculado a partir da @@ -499,21 +644,27 @@ - UNORDERED + + UNORDERED + Opcional. Especifica que a ordem do registro de resultado não é importante. - ORDERED + + ORDERED + Especifica a importância da ordem do registro de resultado. - bool + + bool + Quando for “False” (Falso), especifica que a ordem do registro de resultado não é importante. Quando for “True’ @@ -522,42 +673,54 @@ - STABLE + + STABLE + Opcional. Especifica que a ordem do registro de entrada é importante. - UNSTABLE + + UNSTABLE + Opcional. Especifica que a ordem do registro de entrada não é importante. - PARALLEL + + PARALLEL + Opcional. Tenta avaliar essa atividade em paralelo. - numthreads + + numthreads + Opcional. Tenta avaliar essa atividade usando as threads numthreads. - ALGORITHM + + ALGORITHM + Opcional. Substitui o algoritmo usado para essa atividade. - name + + name + O algoritmo a ser usado para essa atividade. Precisa fazer parte da lista de algoritmos compatíveis com as opções @@ -565,7 +728,9 @@ - SET + + SET + Opcional. SET é usado para definir um valor para uma opção de metadata nomeada. Isso permite que você defina @@ -581,7 +746,9 @@ - option + + option + Uma constante de string – que faz distinção entre maiúsculas e minúsculas – que contém o nome da opção a ser @@ -589,7 +756,9 @@ - value + + value + O valor para o qual a opção será definida. Pode ser qualquer tipo de valor, dependendo do tipo esperado pela @@ -597,7 +766,8 @@ - + + @@ -681,38 +851,85 @@ BUILD(Vehicles,{st,city},{lname},'vkey::st.city'); Exemplo: - nameKey := INDEX(mainTable,{surname,forename,filepos},'name.idx'); -BUILD(nameKey); //gets all info from the INDEX definition + Vehicles := DATASET('vehicles', + {STRING2 st, + STRING20 city, + STRING20 lname, + UNSIGNED8 filepos{VIRTUAL(fileposition)}}, + FLAT); +BUILD(Vehicles,{st,city},{lname},'vkey::st.city1'); +//build key into Vehicles dataset on state and city +//payload the last name + +//same index build using non-inline RECORD structures + +SearchTerms := RECORD + Vehicles.st; + Vehicles.city; +END; +Payload := RECORD + Vehicles.lname; +END; +BUILD(Vehicles,SearchTerms,Payload,'vkey::st.city2'); + - [attrname - := ] BUILD( indexdef, dataset - [, options - ] ); - - A forma 4 cria um arquivo de índice em um dataset usando uma - definição INDEX previamente especificada. - - Isso é usado para criar um índice cuja definição do dataset é - complexa. Isso permite que o índice seja separado de forma lógica do - dataset a partir do qual é criado. Isso é útil especificamente quando a - definição do dataset é bastante complicada (Mb de origem), já que quando o - índice é subsequentemente usado em uma consulta, todos os códigos usados - para criá-lo também são interpretados. - - Exemplo: + [attrname + := ] BUILD( indexdef, dataset + [, options + ] ); - ds = DATASET(100, TRANSFORM({ unsigned id }, SELF.id := COUNTER)); -i := INDEX({ unsigned id }, 'myIndex'); -BUILD(i, ds); + O Formulário 4 permite separar o índice do dataset, tornando-o fácil + de usar o formulário INDEX que não requer um dataset primeiro. + + A forma usual de definir e construir um INDEX em termos do dataset + usado para criá-lo, por meio de uma declaração INDEX onde o o dataset é + nomeado como o primeiro parâmetro do INDEX. Isso é bom quando o dataset é + relativamente simples, mas há desvantagens: + + + + O INDEX não pode ser separado logicamente do dataset que estava + criado a partir de. + + + + Se o dataset for muito complexo (Mb de fonte), quando o índice é + posteriormente usado em uma consulta, todo o código para criá-lo é + também analisado. + + + + Esta forma de BUILD permite que os dois sejam separados, então você + pode omitir o parâmetro do dataset base da definição INDEX e apenas + especifique o dataset a ser usado na ação BUILD. Os campos são mapeados + automaticamente (por nome de campo) do dataset para o índice. + + Exemplo: + + + //usual way to BUILD an INDEX: +ds1 = DATASET(100, TRANSFORM({ UNSIGNED id }, SELF.id := COUNTER)); +i1 := INDEX(ds1, { id }, 'myIndex'); //specifies the dataset to always use +BUILD(i1); + +//Separated way to BUILD an INDEX: +ds2 = DATASET(100, TRANSFORM({ UNSIGNED id }, SELF.id := COUNTER)); +i2 := INDEX({ UNSIGNED id }, 'myIndex'); +BUILD(i2, ds2); //builds the i2 INDEX from the ds2 dataset - + BUILD uma Biblioteca de Consulta - BUILD( library - ); + + BUILD( + + library + + ); + A forma 5 cria uma biblioteca de consulta externa para ser usada apenas no Roxie. diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CASE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CASE.xml index b058108bed1..bf936724dc8 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CASE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CASE.xml @@ -84,20 +84,38 @@ Exemplo: - MyExp := 1+2; + //simple example +MyExp := 1+2; MyChoice := CASE(MyExp, 1 => 9, 2 => 8, 3 => 7, 4 => 6, 5); - // returns a value of 7 for the caseval of 3 -MyRecSet := CASE(MyExp, 1 => Person(per_st = 'FL'), - 2 => Person(per_st = 'GA'), - 3 => Person(per_st = 'AL'), - 4 => Person(per_st = 'SC'), - Person); - // returns set of Alabama Persons for the caseval of 3 -MyAction := CASE(MyExp, 1 => FAIL('Failed for reason 1'), - 2 => FAIL('Failed for reason 2'), - 3 => FAIL('Failed for reason 3'), - 4 => FAIL('Failed for reason 4'), FAIL('Failed for unknown reason')); - // for the caseval of 3, Fails for reason 3 + // returns a value of 7 for the value of MyExp=3 +OUTPUT(MyChoice); + +//example using a DATASET +personRecord := RECORD + STRING UID; + STRING first_name; + STRING last_name; + STRING address; + STRING city; + STRING state; + STRING zip; +END; +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022'}, + {'924','Sally','Jones','22 Main Street','Tampa','FL','33604'}, + {'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101'}, + {'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108'}, + {'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116'}, + {'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131'}], personRecord); + +MyRecSet := CASE(MyExp, 1 => Person(state = 'FL'), + 2 => Person(state = 'GA'), + 3 => Person(state = 'MA'), + 4 => Person(state = 'IL'), + person); + // returns set of MA Persons for the value of MyExp=3 + // set MyExp to a number > 4 to get all records +OUTPUT(MyRecSet); + Ver também: MAP, CHOOSE, IF, Exemplo: - MyRec := RECORD + MyRec := RECORD STRING50 Value1; UNSIGNED Value2; END; @@ -176,7 +176,7 @@ END; ds := DATASET([{'C',1},{'C',2},{'C',3}, {'C',4},{'C',5},{'X',1},{'A',1}],MyRec); -MyRec FailTransform := transform +MyRec FailTransform := TRANSFORM self.value1 := FAILMESSAGE[1..17]; self.value2 := FAILCODE END; @@ -187,7 +187,7 @@ limited3 := LIMIT(ds, 4); recovered1 := CATCH(limited1, SKIP); recovered2 := CATCH(limited2, ONFAIL(FailTransform)); -recovered3 := CATCH(CATCH(limited3, FAIL(1, 'Failed, dude')), ONFAIL(FailTransform)); +recovered3 := CATCH(CATCH(limited3, FAIL(1, 'Failed, sorry')), ONFAIL(FailTransform)); OUTPUT(recovered1); //empty recordset OUTPUT(recovered2); // diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CHOOSE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CHOOSE.xml index f98bf131d2b..ba920694a71 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CHOOSE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CHOOSE.xml @@ -62,12 +62,18 @@ Exemplo: - MyExp := 1+2; + MyExp := 1+2; MyChoice := CHOOSE(MyExp,9,8,7,6,5); // returns 7 -MyChoice := CHOOSE(MyExp,1,2,3,4,5); // returns 3 -MyChoice := CHOOSE(MyExp,15,14,13,12,11); // returns 13 -WorstRate := CHOOSE(IntRate,1,2,3,4,5,6,6,6,6,0); - // WorstRate receives 6 if the IntRate is 7, 8, or 9 +MyChoice2 := CHOOSE(MyExp,1,2,3,4,5); // returns 3 +MyChoice3 := CHOOSE(MyExp,15,14,13,12,11); // returns 13 +OUTPUT(MyChoice); +OUTPUT(MyChoice2); +OUTPUT(MyChoice3); + +IntRate:= 6.5; +RateRating := CHOOSE(IntRate,'Great','Good','Pretty Good','Fair','Fair','High','High','High','High','Invalid'); + // RateRating receives 'High' if the IntRate is between 6 and 9 +OUTPUT(RateRating); Ver também: CASE, - + CHOOSESETS CHOOSESETS @@ -182,7 +182,7 @@ Exemplo: - MyResultSet := CHOOSESETS(Person, + MyResultSet := CHOOSESETS(Person, per_first_name = 'RICHARD' => 100, per_first_name = 'GWENDOLYN' => 200, 100) // returns a set containing 100 Richards, 200 Gwendolyns, 100 others diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CLUSTERSIZE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CLUSTERSIZE.xml index 970aea260ef..06d8f6778f6 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CLUSTERSIZE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CLUSTERSIZE.xml @@ -1,4 +1,4 @@ - + @@ -10,9 +10,9 @@ - + - + @@ -24,9 +24,12 @@ - A constante de tempo de compilaçã CLUSTERSIZE retorna o número de nós em um cluster. Este é o mesmo valor retornado pela função Std.System.ThorLib.Nodes(). Este é o mesmo valor retornado pela função Std.System.ThorLib.Nodes() . + A constante de tempo de compilaçã CLUSTERSIZE + retorna o número de nós em um cluster. Este é o mesmo valor + retornado pela função Std.System.ThorLib.Nodes(). Este é o mesmo valor + retornado pela função Std.System.ThorLib.Nodes() . Exemplo: - OUTPUT(CLUSTERSIZE) + OUTPUT(CLUSTERSIZE) diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COMBINE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COMBINE.xml index d6930b8da53..5c712504dd6 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COMBINE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COMBINE.xml @@ -177,7 +177,7 @@ Exemplo: - inrec := RECORD + inrec := RECORD UNSIGNED6 uid; END; outrec := RECORD(inrec) @@ -231,7 +231,7 @@ OUTPUT(combined2); Exemplo: - inrec := {UNSIGNED6 udid}; + inrec := {UNSIGNED6 udid}; outrec := RECORD(inrec) STRING20 name; UNSIGNED score; @@ -284,7 +284,7 @@ resultRec t(inrec l, DATASET(RECORDOF(combined)) r) := TRANSFORM SELF := l; END; res1 := COMBINE(dsg,combined,GROUP,t(LEFT, ROWS(RIGHT)(score != 0)),LOCAL); -OUPUT(res1); +OUTPUT(res1); //A variation using rows in a child query. resultRec t2(inrec l, DATASET(RECORDOF(combined)) r) := TRANSFORM @@ -293,7 +293,7 @@ resultRec t2(inrec l, DATASET(RECORDOF(combined)) r) := TRANSFORM SELF := l; END; res2 := COMBINE(dsg,combined,GROUP,t2(LEFT,ROWS(RIGHT)(score != 0)),LOCAL); -OUPUT(res2); +OUTPUT(res2); Ver também: GROUP, REGROUP diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CORRELATION.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CORRELATION.xml index d6cc6cb17fd..9fe813b7f5f 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CORRELATION.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-CORRELATION.xml @@ -145,9 +145,8 @@ Exemplo: - -pointRec := { REAL x, REAL y }; -analyse( ds) := MACRO + pointRec := { REAL x, REAL y }; +analyze( ds) := MACRO #uniquename(stats) %stats% := TABLE(ds, { c := COUNT(GROUP), sx := SUM(GROUP, x), @@ -184,9 +183,9 @@ ds3 := DATASET([ {1, 1.00039}, {4, 3.87114}, {5, 5.12417}, {6, 6.20283} ], pointRec); -analyse(ds1); -analyse(ds2); -analyse(ds3); +analyze(ds1); +analyze(ds2); +analyze(ds3); Ver também: VARIANCE, Exemplo: - Rad2Deg := 57.295779513082; //number of degrees in a radian - + Deg2Rad := 0.0174532925199; //number of radians in a degree - Angle45 := 45 * Deg2Rad; //translate 45 degrees into radians - Cosine45 := COS(Angle45); //get cosine of the 45 degree angle +OUTPUT(Cosine45); Ver também: ACOS, Exemplo: - Rad2Deg := 57.295779513082; //number of degrees in a radian - -Deg2Rad := 0.0174532925199; //number of radians in a degree - + Deg2Rad := 0.0174532925199; //number of radians in a degree Angle45 := 45 * Deg2Rad; //translate 45 degrees into radians - -HyperbolicCosine45 := COSH(Angle45); - //get hyperbolic cosine of the 45 degree angle +HyperbolicCosine45 := COSH(Angle45); + //get hyperbolic cosine of the 45 degree angle +OUTPUT(HyperbolicCosine45); Ver também: ACOS, Exemplo: - MyCount := COUNT(Trades(Trades.trd_rate IN ['3', '4', '5'])); + MyCount := COUNT(Trades(Trades.trd_rate IN ['3', '4', '5'])); // count the number of records in the Trades record // set whose trd_rate field contains 3, 4, or 5 R1 := RECORD diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COVARIANCE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COVARIANCE.xml index 3069cc9e6f5..4b6642b34cc 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COVARIANCE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-COVARIANCE.xml @@ -145,8 +145,8 @@ Exemplo: - pointRec := { REAL x, REAL y }; -analyse( ds) := MACRO + pointRec := { REAL x, REAL y }; +analyze( ds) := MACRO #uniquename(stats) %stats% := TABLE(ds, { c := COUNT(GROUP), sx := SUM(GROUP, x), @@ -189,9 +189,9 @@ ds3 := DATASET([ {1, 1.00039}, {5, 5.12417}, {6, 6.20283} ], pointRec); -analyse(ds1); -analyse(ds2); -analyse(ds3); +analyze(ds1); +analyze(ds2); +analyze(ds3); Ver também: VARIANCE, Exemplo: - EXPORT events := MODULE + EXPORT events := MODULE EXPORT dailyAtMidnight := CRON('0 0 * * *'); EXPORT dailyAt( INTEGER hour, INTEGER minute=0) := diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEDUP.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEDUP.xml index 1ea6fe8050c..e0888d3cfcc 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEDUP.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEDUP.xml @@ -113,7 +113,10 @@ n - O número de registros duplicados a serem mantidos. + O número de registros duplicados a serem mantidos. Se + keeper estiver definido como RIGHT, o único + número válido de registros duplicados a serem mantidos é + 1. @@ -266,7 +269,7 @@ Exemplo: - SomeFile := DATASET([{'001','KC','G'}, + SomeFile := DATASET([{'001','KC','G'}, {'002','KC','Z'}, {'003','KC','Z'}, {'004','KC','C'}, diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEFINE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEFINE.xml index b2366c5a766..aaab971f18c 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEFINE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DEFINE.xml @@ -51,13 +51,13 @@ Exemplo: - RULE a := USE('symbol'); + RULE a := USE('symbol'); //uses the 'symbol'pattern defined later - b RULE b := 'pattern'; //defines a rule pattern RULE s := DEFINE(b,'symbol'); //associate the "b" rule with the - //'symbol' for forward reference by rule "a + //'symbol' for forward reference by rule "a" Ver também: PARSE, Exemplo NOSORT: - + NormRec := RECORD + STRING20 thename; + STRING20 addr; +END; +NamesRec := RECORD + UNSIGNED1 numRows; + STRING20 thename; + STRING20 addr1 := ''; + STRING20 addr2 := ''; + STRING20 addr3 := ''; + STRING20 addr4 := ''; +END; +NamesTable := DATASET([ {0,'Kevin'},{0,'Liz'},{0,'Mr Nobody'}, + {0,'Anywhere'}], NamesRec); +NormAddrs := DATASET([{'Kevin','10 Malt Lane'}, + {'Liz','10 Malt Lane'}, + {'Liz','3 The cottages'}, + {'Anywhere','Here'}, + {'Anywhere','There'}, + {'Anywhere','Near'}, + {'Anywhere','Far'}],NormRec); +NamesRec DeNormThem(NamesRec L, NormRec R, INTEGER C) := TRANSFORM + SELF.NumRows := C; + SELF.addr1 := IF (C=1, R.addr, L.addr1); + SELF.addr2 := IF (C=2, R.addr, L.addr2); + SELF.addr3 := IF (C=3, R.addr, L.addr3); + SELF.addr4 := IF (C=4, R.addr, L.addr4); + SELF := L; +END; +DeNormedRecs := DENORMALIZE(NamesTable, NormAddrs, + LEFT.thename = RIGHT.thename, + DeNormThem(LEFT,RIGHT,COUNTER)); +OUTPUT(DeNormedRecs); + + + Form 2 example: + + NormRec := RECORD + STRING20 thename; + STRING20 addr; +END; +NamesRec := RECORD + UNSIGNED1 numRows; + STRING20 thename; + DATASET(NormRec) addresses; +END; +NamesTable := DATASET([ {0,'Kevin',[]},{0,'Liz',[]}, + {0,'Mr Nobody',[]},{0,'Anywhere',[]}], + NamesRec); +NormAddrs := DATASET([{'Kevin','10 Malt Lane'}, + {'Liz','10 Malt Lane'}, + {'Liz','3 The cottages'}, + {'Anywhere','Here'}, + {'Anywhere','There'}, + {'Anywhere','Near'}, + {'Anywhere','Far'}],NormRec); +NamesRec DeNormThem(NamesRec L, DATASET(NormRec) R) := TRANSFORM + SELF.NumRows := COUNT(R); + SELF.addresses := R; + SELF := L; +END; +DeNormedRecs := DENORMALIZE(NamesTable, NormAddrs, + LEFT.thename = RIGHT.thename, + GROUP, + DeNormThem(LEFT,ROWS(RIGHT))); +OUTPUT(DeNormedRecs); + + + NOSORT example: + + MyRec := RECORD + STRING1 Value1; + STRING1 Value2; +END; +ParentFile := DATASET([{'A','C'},{'B','B'},{'C','A'}],MyRec); +ChildFile := DATASET([{'A','Z'},{'A','T'},{'B','S'},{'B','Y'}, + {'C','X'},{'C','W'}],MyRec); +MyOutRec := RECORD ParentFile.Value1; ParentFile.Value2; STRING1 CVal2_1 := ''; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTE.xml index d8d74c019a0..775fa0e74d4 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTE.xml @@ -275,7 +275,7 @@ Exemplo: - MySet1 := DISTRIBUTE(Person); //"random" distribution - no skew + MySet1 := DISTRIBUTE(Person); //"random" distribution - no skew MySet2 := DISTRIBUTE(Person,HASH32(Person.per_ssn)); //all people with the same SSN end up on the same node //INDEX example: diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTED.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTED.xml index 1d8a4d6749c..ac60f30c5d5 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTED.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-DISTRIBUTED.xml @@ -53,7 +53,7 @@ Exemplo: - MySet := DISTRIBUTED(Person,HASH32(Person.per_ssn)); + MySet := DISTRIBUTED(Person,HASH32(Person.per_ssn)); //all people with the same SSN are already on the same node Ver também: HASH32, Exemplo: - SomeFile := DATASET([{'C','G'},{'C','C'},{'A','X'},{'B','G'}], + <XML> + <Field name="seqnum" estimate="4000000"/> +</XML> + + The DECIMAL data type is not supported by this action. You can use a + REAL data type instead. + + Example: + + SomeFile := DATASET([{'C','G'},{'C','C'},{'A','X'},{'B','G'}], {STRING1 Value1,STRING1 Value2}); DISTRIBUTION(SomeFile); /* The result comes back looking like this: @@ -171,7 +180,7 @@ namesTable := DATASET([ {'Salter','Abi',10}, {'X','Z',5}], namesRecord); -DISTRIBUTION(namesTable, surname, forename, NAMED('Stats')); +doFirst := DISTRIBUTION(namesTable, surname, forename, NAMED('Stats')); /* The result comes back looking like this: <XML> <Field name="surname" distinct="3"> @@ -196,7 +205,7 @@ res := RECORD STRING Cnt := XMLTEXT('@distinct'); END; -out := PARSE(x, line, res, XML('XML/Field')); -out; +DoNext := PARSE(x, line, res, XML('XML/Field')); +SEQUENTIAL(DoFirst,OUTPUT(DoNext)); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EBCDIC.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EBCDIC.xml index 1be43addc5c..9caeb6e8c0b 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EBCDIC.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EBCDIC.xml @@ -1,4 +1,4 @@ - + @@ -8,64 +8,92 @@ EBCDIC EBCDIC function - (recordset[, UNORDERED | ORDERED( bool ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ ( numthreads ) ] ] [, ALGORITHM( name ) ] ) + (recordset[, UNORDERED | ORDERED( bool + ) ] [, STABLE | UNSTABLE ] [, PARALLEL [ + ( numthreads ) ] ] [, + ALGORITHM( name ) ] + ) - + - + recordset - O conjunto de registros para processamento. Pode ser o nome de um dataset ou de um recordset derivado de algumas condições de filtro, ou qualquer expressão que resulte em um recordset derivado. + O conjunto de registros para processamento. Pode ser o nome + de um dataset ou de um recordset derivado de algumas condições de + filtro, ou qualquer expressão que resulte em um recordset + derivado. + UNORDERED - Opcional. Especifica que a ordem do registro de resultado não é importante. + Opcional. Especifica que a ordem do registro de resultado + não é importante. + ORDERED - Especifica a importância da ordem do registro de resultado. + Especifica a importância da ordem do registro de + resultado. + bool - Quando for “False” (Falso), especifica que a ordem do registro de resultado não é importante. Quando for “True’ (Verdadeiro), especifica a ordem padrão do registro de resultado. + Quando for “False” (Falso), especifica que a ordem do + registro de resultado não é importante. Quando for “True’ + (Verdadeiro), especifica a ordem padrão do registro de + resultado. + STABLE - Opcional. Especifica que a ordem do registro de entrada é importante. + Opcional. Especifica que a ordem do registro de entrada é + importante. + UNSTABLE - Opcional. Especifica que a ordem do registro de entrada não é importante. + Opcional. Especifica que a ordem do registro de entrada não + é importante. + PARALLEL Opcional. Tenta avaliar essa atividade em paralelo. + numthreads - Opcional. Tenta avaliar essa atividade usando os threads numthreads. numthreads threads + Opcional. Tenta avaliar essa atividade usando os threads + numthreads. numthreads threads + ALGORITHM - Opcional. Substitui o algoritmo usado para essa atividade. + Opcional. Substitui o algoritmo usado para essa + atividade. + name - O algoritmo a ser usado para essa atividade. Precisa fazer parte da lista de algoritmos compatíveis com as opções STABLE e UNSTABLE da função SORT. + O algoritmo a ser usado para essa atividade. Precisa fazer + parte da lista de algoritmos compatíveis com as opções STABLE e + UNSTABLE da função SORT. @@ -79,12 +107,13 @@ .. - A função ASCII retorna o - recordset com todos os campos da STRING traduzidos do EBCDIC para ASCII. + A função ASCII retorna o + recordset com todos os campos da STRING traduzidos do + EBCDIC para ASCII. Exemplo: - EBCDICRecs := EBCDIC(SomeASCIIInput); + EBCDICRecs := EBCDIC(SomeASCIIInput); Ver também: ASCII diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ENTH.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ENTH.xml index 9b8f25d8e02..d7ed55a9f96 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ENTH.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ENTH.xml @@ -156,11 +156,7 @@ Exemplo: - MySample1 := ENTH(Person,1,10,1); // 10% (1 out of every 10) -MySample2 := ENTH(Person,15,100,1); // 15% (15 out of every 100) -MySample3 := ENTH(Person,3,4,1); // 75% (3 out of every 4) - -SomeFile := DATASET([{'A'},{'B'},{'C'},{'D'},{'E'}, + SomeFile := DATASET([{'A'},{'B'},{'C'},{'D'},{'E'}, {'F'},{'G'},{'H'},{'I'},{'J'}, {'K'},{'L'},{'M'},{'N'},{'O'}, {'P'},{'Q'},{'R'},{'S'},{'T'}, @@ -168,6 +164,10 @@ SomeFile := DATASET([{'A'},{'B'},{'C'},{'D'},{'E'}, {STRING1 Letter}); Set1 := ENTH(SomeFile,2,10,1); // returns E, J, O, T, Y +// other examples +// MySample1 := ENTH(Person,1,10,1); // 10% (1 out of every 10) +// MySample2 := ENTH(Person,15,100,1); // 15% (15 out of every 100) +// MySample3 := ENTH(Person,3,4,1); // 75% (3 out of every 4) See Also: CHOOSEN, Exemplo: - outrec Xform(inrec L, inrec R) := TRANSFORM + outrec Xform(inrec L, inrec R) := TRANSFORM SELF.key := IF(L.key <= R.key, R.key,ERROR('Recs not in order')); END; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVALUATE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVALUATE.xml index b5050a65180..2076652fef0 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVALUATE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVALUATE.xml @@ -74,7 +74,7 @@ Exemplo da Form 1: - myService := SERVICE + myService := SERVICE UNSIGNED4 doSomething(STRING text); END; @@ -85,10 +85,10 @@ APPLY(ds, EVALUATE(doSomething(ds.text))); // dataset, ignoring the returned values from the function - Exemplo de Form 2: + Form 2 example: - M := MODULE - EXPORT a := 10; + M := MODULE + EXPORT a := OUTPUT(10); EXPORT b := OUTPUT('Hello'); END; @@ -169,33 +169,34 @@ EVALUATE(M2); Exemplo: - WorstCard := SORT(Cards,Std.Scoring); -MyValue := EVALUATE(WorstCard[1],Std.Utilization); - // WorstCard[1] uses indexing to get the first record - // in the sort order, then evaluates that record - // returning the Std.Utilization value - + TrdRec := RECORD + UNSIGNED2 Trd_ID; + INTEGER4 Trd_bal; + INTEGER4 Trd_hc; +END; +PersonRec := RECORD + STRING20 FirstName; + STRING20 LastName; + DATASET(TrdRec) Trd; +END; +Person := DATASET([{'Fred','Jones',[{1,2,3},{2,4,5}]}, + {'Sue','Smith',[{10,-2,60},{12,14,50}]}, + {'Joe','Johnson',[{11,200,3000},{22,140,350},{25,100,850}]}, + {'Susan','Stone',[{102,2,30},{125,14,50},{225,14000,50000}]}],PersonRec); +Trades := Person.Trd; +ValidMoney(n) := n > 0; ValidBalTrades := trades(ValidMoney(trades.trd_bal)); HighestBals := SORT(ValidBalTrades,-trades.trd_bal); Highest_HC := EVALUATE(HighestBals[1],trades.trd_hc); - //return trd_hc field of the trade with the highest balance - // could also be coded as (using indexing): - // Highest_HC := HighestBals[1].trades.trd_hc; - -OUTPUT(Person,{per_last_name,per_first_name,Highest_HC}); - //output that Highest_HC for each person - //This output operates at the scope of the Person record - // EVALUATE is needed to get the value from a Trades record - // because Trades is a Child of Person - -IsValidInd := trades.trd_ind_code IN ['FM','RE']; -IsMortgage := IsValidInd OR trades.trd_rate = 'G'; -SortedTrades := SORT(trades(ValidDate(trades.trd_dopn),isMortgage), - trades.trd_dopn_mos); -CurrentRate := MAP(~EXISTS(SortedTrades) => ' ', - EVALUATE(SortedTrades[1], trades.trd_rate)); - -OUTPUT(person,{CurrentRate}); + //return trd_hc field of the trade with the highest balance + // could also be coded as (using indexing): + // Highest_HC := HighestBals[1].trades.trd_hc; + +OUTPUT(Person,{lastname,firstname,Highest_HC}); + //output that Highest_HC for each person + //This output operates at the scope of the Person record + // EVALUATE is needed to get the value from a Trades record + // because Trades is a Child of Person See Also: SORT diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENT.xml index 88a3e70eed7..8e235a22f77 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENT.xml @@ -52,7 +52,7 @@ Exemplo: - IMPORT STD; + IMPORT STD; MyEventName := 'MyFileEvent'; MyFileName := 'test::myfile'; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTEXTRA.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTEXTRA.xml index e276cc523fe..801e7123758 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTEXTRA.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTEXTRA.xml @@ -32,19 +32,18 @@ Exemplo: - doMyService := FUNCTION - OUTPUT('Did a Service for: ' + 'EVENTNAME=' + EVENTNAME); - NOTIFY(EVENT('MyServiceComplete', - '<Event><returnTo>FRED</returnTo></Event>'), - EVENTEXTRA('returnTo')); - RETURN EVENTEXTRA('returnTo'); + doMyService := FUNCTION + O := OUTPUT('Did a Service for: ' + 'EVENTNAME=' + EVENTNAME); + N := NOTIFY(EVENT('MyServiceComplete', + '<Event><returnTo>FRED</returnTo></Event>'), + EVENTEXTRA('returnTo')); + RETURN WHEN(EVENTEXTRA('returnTo'),ORDERED(O,N)); END; +OUTPUT(doMyService) : WHEN('MyService'); -doMyService : WHEN('MyService'); - -// and a call +// and a call (in a separate workunit): NOTIFY('MyService', - '<Event><returnTo>'+WORKUNIT+'</returnTo></Event>'); + '<Event><returnTo>'+ WORKUNIT + '</returnTo></Event>'); WAIT('MyServiceComplete'); OUTPUT('WORKUNIT DONE') diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTNAME.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTNAME.xml index f16f9daef23..7f9b330a854 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTNAME.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EVENTNAME.xml @@ -29,19 +29,18 @@ Exemplo: - doMyService := FUNCTION - OUTPUT('Did a Service for: ' + 'EVENTNAME=' + EVENTNAME); - NOTIFY(EVENT('MyServiceComplete', - '<Event><returnTo>FRED</returnTo></Event>'), - EVENTEXTRA('returnTo')); - RETURN EVENTEXTRA('returnTo'); + doMyService := FUNCTION + O := OUTPUT('Did a Service for: ' + 'EVENTNAME=' + EVENTNAME); + N := NOTIFY(EVENT('MyServiceComplete', + '<Event><returnTo>FRED</returnTo></Event>'), + EVENTEXTRA('returnTo')); + RETURN WHEN(EVENTEXTRA('returnTo'),ORDERED(O,N)); END; +OUTPUT(doMyService) : WHEN('MyService'); -doMyService : WHEN('MyService'); - -// and a call +// and a call (in a separate workunit): NOTIFY('MyService', - '<Event><returnTo>'+WORKUNIT+'</returnTo></Event>'); + '<Event><returnTo>'+ WORKUNIT + '</returnTo></Event>'); WAIT('MyServiceComplete'); OUTPUT('WORKUNIT DONE') diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EXISTS.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EXISTS.xml index 83880fb20bb..f0c39e311ac 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EXISTS.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-EXISTS.xml @@ -139,15 +139,44 @@ Exemplo: - MyBoolean := EXISTS(Publics(pub_type = 'B')); + TrdRec := RECORD + UNSIGNED2 Trd_ID; + INTEGER4 Trd_bal; + INTEGER4 Trd_hc; +END; + +PersonRec := RECORD + STRING20 FirstName; + STRING20 LastName; + DATASET(TrdRec) Trd; +END; + +Person := DATASET([{'Noah','Brody',[]}, + {'Fred','Jones',[{1,2,3},{2,4,5}]}, + {'Sue','Smith',[{10,-2,60},{12,14,50}]}, + {'Joe','Johnson',[{11,200,3000},{22,140,350},{25,100,850}]}, + {'Susan','Stone',[{102,2,30},{125,14,50},{225,14000,50000}]}],PersonRec); +Trades := Person.Trd; + +MyBoolean := EXISTS(Trades(Trd_ID = 15)); +OUTPUT(MyBoolean); //returns FALSE + TradesExistPersons := Person(EXISTS(Trades)); +OUTPUT(TradesExistPersons); //returns 4 records + NoTradesPerson := Person(NOT EXISTS(Trades)); +OUTPUT(NoTradesPerson); //returns 1 record + +SetExists1 := EXISTS(4,8,16,2,1); +OUTPUT(SetExists1); //returns TRUE -MinVal2 := EXISTS(4,8,16,2,1); //returns TRUE SetVals := [4,8,16,2,1]; -MinVal3 := EXISTS(SetVals); //returns TRUE -NullSet := []; -MinVal3 := EXISTS(NullSet); //returns FALSE +SetExists2 := EXISTS(SetVals); +OUTPUT(SetExists2); //returns TRUE + +EmptySet := []; +SetExists3 := EXISTS(EmptySet); +OUTPUT(SetExists3); //returns FALSE Ver também: DEDUP, Exemplo: - MyPI := EXP(3.14159); -Interim := ROUND(1000 * (EXP(MyPI)/(1 + EXP(MyPI)))); + MyPI := EXP(3.14159); +Interim := ROUND(1000 * (EXP(MyPI)/(1 + EXP(MyPI)))); +OUTPUT(Interim); + Ver também: LN, SQRT, POWER diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FAIL.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FAIL.xml index bc265db1b27..7b51cdbc554 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FAIL.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FAIL.xml @@ -77,7 +77,7 @@ Exemplo: - IF(header.version <> doxie.header_version_new, + IF(header.version <> doxie.header_version_new, FAIL('Mismatch -- header.version vs. doxie.header_version_new.')); FailedJob := FAIL('ouch, it broke'); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FETCH.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FETCH.xml index 772499e95b1..cd398308378 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FETCH.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FETCH.xml @@ -169,7 +169,7 @@ Exemplo: - PtblRec := RECORD + PtblRec := RECORD STRING2 State := Person.per_st; STRING20 City := Person.per_full_city; STRING25 Lname := Person.per_last_name; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMJSON.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMJSON.xml index 94a9b5125b1..d923671d4fb 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMJSON.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMJSON.xml @@ -63,7 +63,7 @@ Exemplo: - namesRec := RECORD + namesRec := RECORD UNSIGNED2 EmployeeID{xpath('EmpID')}; STRING10 Firstname{xpath('FName')}; STRING10 Lastname{xpath('LName')}; @@ -75,7 +75,7 @@ OUTPUT(rec); Exemplo com manuseio do Error e JSON inválido: - namesRec := RECORD + namesRec := RECORD UNSIGNED2 EmployeeID{xpath('EmpID')}; STRING20 Firstname{xpath('FName')}; STRING20 Lastname{xpath('LName')}; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMUNICODE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMUNICODE.xml index baefa41aee1..c12ed4602fe 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMUNICODE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMUNICODE.xml @@ -1,4 +1,4 @@ - + @@ -13,9 +13,9 @@ - + - + @@ -27,7 +27,8 @@ encoding - A página do código de codificação (suportada pelo ICU da IBM) a ser usada para tradução. + A página do código de codificação (suportada pelo ICU da + IBM) a ser usada para tradução. @@ -39,13 +40,16 @@ - A função FROMUNICODE retorna a - string traduzida da codificação - especificada para um valor DATA. + A função FROMUNICODE retorna a + string traduzida da codificação + especificada para um valor DATA. Exemplo: - DATA5 x := FROMUNICODE(u'ABCDE','UTF-8'); //results in 4142434445 + DATA5 x := FROMUNICODE(u'ABCDE','UTF-8'); //results in 4142434445 +OUTPUT(x); + - Ver também: TOUNICODE, UNICODEORDER + Ver também: TOUNICODE, UNICODEORDER diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMXML.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMXML.xml index 3f98e6aa242..bfbf5423e37 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMXML.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-FROMXML.xml @@ -61,7 +61,7 @@ Exemplo: - namesRec := RECORD + namesRec := RECORD UNSIGNED2 EmployeeID{xpath('EmpID')}; STRING10 Firstname{xpath('FName')}; STRING10 Lastname{xpath('LName')}; @@ -72,7 +72,7 @@ OUTPUT(rec); Exemplo com manuseio do Error e XML inválido: - namesRec := RECORD + namesRec := RECORD UNSIGNED2 EmployeeID{xpath('EmpID')}; STRING20 Firstname{xpath('FName')}; STRING20 Lastname{xpath('LName')}; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GETENV.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GETENV.xml index 8aef06675c7..0fe5d192a32 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GETENV.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GETENV.xml @@ -49,9 +49,14 @@ Exemplo: - g1 := GETENV('namesTable'); + g1 := GETENV('namesTable'); g2 := GETENV('myPort','25'); +OUTPUT(GETENV('HPCC_DEPLOYMENT', 'unknown')); OUTPUT(g1); +OUTPUT(g2); + + Veja também: Variáveis de + Ambiente diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GLOBAL.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GLOBAL.xml index dea2357fa6b..8dd354c9337 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GLOBAL.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GLOBAL.xml @@ -63,7 +63,7 @@ Exemplo: - IMPORT doxie; + IMPORT doxie; besr := doxie.best_records; ssnr := doxie.ssn_records; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GRAPH.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GRAPH.xml index da63ae669fd..8142d364c48 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GRAPH.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-GRAPH.xml @@ -46,7 +46,8 @@ - ROWSET + ROWSET ROWSET LEFT ROWSET(LEFT) @@ -152,29 +153,78 @@ gráfico resultante é tão eficiente quanto se estivesse sido expandido à mão. + Esta função é chamada GRAPH porque cria um gráfico de execução em + tempo de execução (normalmente usado em consultas ROXIE) a partir de uma + coleção de componentes em tempo de compilação. A palavra-chave ROWSET(LEFT) + indica que cada iteração adiciona seu resultado ao SET OF DATASETs passado + para a próxima iteração. Isso significa que o resultado de cada iteração + deve ser um dataset no mesmo formato do parâmetro + recordset de entrada inicial. O uso típico da função + GRAPH() seria em consultas para as quais cada iteração subsequente requer + acesso a qualquer/todos os resultados das iterações anteriores. + Exemplo: - namesRec := RECORD - STRING20 lname; - STRING10 fname; - UNSIGNED2 age := 25; - UNSIGNED2 ctr := 0; + //This simple example demonstrates text searching +// for a variable number of search terms. +//For simplicity's sake this example uses sets, +// whereas in a production query you would most likely +// use inverted indexes into your huge datasets. + +IMPORT Std; +//layout of the dataset containing text to search: +Rec := {UNSIGNED1 RecID, STRING line}; +//The text search function: +SearchText(STRING SearchFor, DATASET(Rec) SearchIn) := FUNCTION + //uppercase and clean the data: + Ltrs := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + Upper(STRING s) := Std.Str.toUpperCase(s); + LosePunc(STRING s) := STD.Str.SubstituteExcluded(Upper(s),Ltrs,' '); + + //create a set of words: + SetWords(STRING s) := Std.Str.SplitWords(s,' '); + + //the set of words to search for: + SearchWords := SetWords(LosePunc(SearchFor)); + + //split the text lines to search into sets of words: + LineWords := + PROJECT(SearchIn, + TRANSFORM({UNSIGNED1 RecID,SET OF STRING wordset}, + SELF.wordset := SetWords(LosePunc(LEFT.line)), + SELF := LEFT)); + + //the graph processor function: + GraphWork(SET OF DATASET(RECORDOF(LineWords)) ds, UNSIGNED4 C) := FUNCTION + //find all matches for the current iteration's word: + NewMatches := LineWords(SearchWords[C] IN wordset); + //return only those lines that were also in + // the previous iteration's result: + RETURN JOIN(ds[C-1],NewMatches,LEFT.RecID = RIGHT.RecID); + END; + GraphRes := GRAPH(LineWords, + COUNT(SearchWords), + GraphWork(ROWSET(LEFT),COUNTER)); + + //Return original records where all search terms were found: + + RETURN SearchIn(RecID IN SET(GraphRes,RecID)); END; -namesTable2 := DATASET([{'Flintstone','Fred',35}, - {'Flintstone','Wilma',33}, - {'Jetson','Georgie',10}, - {'Mr. T','Z-man'}], namesRec); - -loopBody(SET OF DATASET(namesRec) ds, UNSIGNED4 c) := - PROJECT(ds[c-1], //ds[0]=original input - TRANSFORM(namesRec, - SELF.age := LEFT.age+c; //c is graph COUNTER - SELF.ctr := COUNTER; //PROJECT's COUNTER - SELF := LEFT)); - -g1 := GRAPH(namesTable2,10,loopBody(ROWSET(LEFT),COUNTER)); -OUTPUT(g1); +ds1 := DATASET([{1,'It is a truth universally acknowledged, that a single man' + + ' in possession of a good fortune, must be in want of a wife.'}, + {2,'"My dear Mr. Bennet," said his lady to him one day,' + + ' "have you heard that Netherfield Park is let at last?"'}, + {3,'Mr. Bennet replied that he had not.'}, + {4,'"But it is," returned she; "for Mrs. Long has just been here,' + + ' and she told me all about it."'}, + {5,'Mr. Bennet made no answer.'}, + {6,'"Do you not want to know who has taken it?" cried his' + + ' wife impatiently.'}, + {7,'"You want to tell me, and I have no objection to hearing it."'}],Rec); + +SearchText('Mr. Bennet',ds1); //returns 2, 3, 5 +SearchText('Mr. Bennet said',ds1); //returns 2 Ver também: LOOP, Exemplo: - MyRec := RECORD - STRING20 Last; - STRING20 First; + personRecord := RECORD +STRING UID; +STRING first_name; +STRING last_name; +STRING address; +STRING city; +STRING state; +STRING zip; END; -SortedSet := SORT(Person,Person.last_name); //sort by last name +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022'}, +{'924','Sally','Jones','22 Main Street','Tampa','FL','33604'}, +{'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101'}, +{'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108'}, +{'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116'}, +{'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131'}], personRecord); + +SortedSet := SORT(Person,last_name); //sort by last name GroupedSet := GROUP(SortedSet,last_name); //then group them +OUTPUT(GroupedSet); -SecondSort := SORT(GroupedSet,Person.first_name); +SecondSort := SORT(GroupedSet,first_name); //sorts by first name within each last name group // this is a "sort within group" +OUTPUT(SecondSort); UnGroupedSet := GROUP(GroupedSet); //ungroup the dataset -MyTable := TABLE(SecondSort,MyRec); //create table of sorted names +OUTPUT(UnGroupedSet); Ver também: REGROUP, Exemplo: - MySet := DISTRIBUTE(Person,HASH(Person.per_ssn)); - //people with the same SSN go to same Data Refinery node + personRecord := RECORD +STRING UID; +STRING first_name; +STRING last_name; +STRING address; +STRING city; +STRING state; +STRING zip; +STRING SSN +END; +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022','000-423-6567'}, +{'924','Sally','Jones','22 Main Street','Tampa','FL','33604','000-123-4567'}, +{'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101','000-123-3383'}, +{'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108','000-123-4464'}, +{'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116','000-123-5556'}, +{'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131','000-123-7890'}], personRecord); + +OUTPUT(Person,{SSN,HASH(SSN)}); + //output SSN and its hash value Ver também: DISTRIBUTE, HASH32, HASH64, Exemplo: - OUTPUT(Person,{per_ssn,HASH64(per_ssn)}); + personRecord := RECORD +STRING UID; +STRING first_name; +STRING last_name; +STRING address; +STRING city; +STRING state; +STRING zip; +STRING SSN +END; +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022','000-423-6567'}, +{'924','Sally','Jones','22 Main Street','Tampa','FL','33604','000-123-4567'}, +{'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101','000-123-3383'}, +{'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108','000-123-4464'}, +{'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116','000-123-5556'}, +{'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131','000-123-7890'}], personRecord); + +OUTPUT(Person,{SSN,HASH64(SSN)}); //output SSN and its 64-bit hash value Ver também: DISTRIBUTE, Exemplo: - OUTPUT(Person,{per_ssn,HASHCRC(per_ssn)}); - //output SSN and its CRC hash value + personRecord := RECORD +STRING UID; +STRING first_name; +STRING last_name; +STRING address; +STRING city; +STRING state; +STRING zip; +STRING SSN +END; +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022','000-423-6567'}, +{'924','Sally','Jones','22 Main Street','Tampa','FL','33604','000-123-4567'}, +{'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101','000-123-3383'}, +{'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108','000-123-4464'}, +{'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116','000-123-5556'}, +{'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131','000-123-7890'}], personRecord); + +OUTPUT(Person,{SSN,HASH64(SSN)}); + //output SSN and its 64-bit hash value Ver também: DISTRIBUTE, HASH, HASH32, Exemplo: - OUTPUT(Person,{per_ssn,HASHMD5(per_ssn)}); - //output SSN and its 128-bit hash value + personRecord := RECORD +STRING UID; +STRING first_name; +STRING last_name; +STRING address; +STRING city; +STRING state; +STRING zip; +STRING SSN +END; +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022','000-423-6567'}, +{'924','Sally','Jones','22 Main Street','Tampa','FL','33604','000-123-4567'}, +{'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101','000-123-3383'}, +{'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108','000-123-4464'}, +{'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116','000-123-5556'}, +{'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131','000-123-7890'}], personRecord); Ver também: DISTRIBUTE, HASH, HASH32, Exemplo: - MyGroups := GROUP(SORT(Person,lastname),lastname); - //group by last name -Filtered := HAVING(MyGroups,COUNT(ROWS(LEFT)) > 10); - //filter out the small groups + personRecord := RECORD +STRING UID; +STRING first_name; +STRING last_name; +STRING address; +STRING city; +STRING state; +STRING zip; +STRING SSN +END; +person := DATASET([{'923','James','Jones','123 Elm Street','Hollywood','FL','33022','000-423-6567'}, +{'924','Sally','Jones','22 Main Street','Tampa','FL','33604','000-123-4567'}, +{'925','Jose','Gomez','111 Biscaya Lane','Miami','FL','33101','000-123-3383'}, +{'926','Adam','Wesson','77 Sunset Blvd','Boston','MA','02108','000-123-4464'}, +{'927','Evelyn','Murray','740 SW 10th Street','Boston ','MA','02116','000-123-5556'}, +{'928','Joe','Yung','7511 Simson Avenue','Chicago','IL','60131','000-123-7890'}], personRecord); + +MyGroups := GROUP(SORT(Person,state),state); + //group by state +Filtered := HAVING(MyGroups,COUNT(ROWS(LEFT)) > 1); + //filter out the small groups +OUTPUT(Filtered); + Ver também: GROUP diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-HTTPCALL.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-HTTPCALL.xml index e453e925a2b..759e56a025d 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-HTTPCALL.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-HTTPCALL.xml @@ -159,7 +159,7 @@ Exemplo: - worldBankSource := RECORD + worldBankSource := RECORD STRING name {XPATH('name')} END; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IFF.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IFF.xml index bcfe4407226..a16a22d6ea4 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IFF.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IFF.xml @@ -1,4 +1,4 @@ - + @@ -14,9 +14,9 @@ - + - + @@ -28,28 +28,48 @@ trueresult - O resultado a ser retornado quando a expressão é “true” (verdadeira). Isso pode ser qualquer expressão ou ação. + O resultado a ser retornado quando a expressão é “true” + (verdadeira). Isso pode ser qualquer expressão ou ação. falseresult - O resultado a ser retornado quando a expressão é “false” (falsa). Isso pode ser qualquer expressão ou ação. Pode ser omitido apenas se o resultado for uma ação. + O resultado a ser retornado quando a expressão é “false” + (falsa). Isso pode ser qualquer expressão ou ação. Pode ser + omitido apenas se o resultado for uma ação. Return: - IF retorna um único valor, conjunto, conjunto de registros ou ação. + IF retorna um único valor, conjunto, conjunto de registros + ou ação. - A função IFF desempenha a mesma funcionalidade que a IF, mas assegura que uma expressão - com lógica booleana complexa seja avaliada exatamente como é exibida. + A função IFF desempenha a mesma + funcionalidade que a IF, mas assegura que uma expressão + com lógica booleana complexa seja avaliada exatamente como é exibida. - Ver também: IF, MAP, - EVALUATE, CASE, - CHOOSE, SET + A principal diferença entre IF e IFF está nas expressões escalares + condicionais. Geralmente, os argumentos para os operadores IF() do dataset + são sempre avaliados preguiçosamente, mas há situações, se o tipo de + expressão for uma linha ou um escalar, em que eles podem não ser. + + Por exemplo: + + foo := IF (age < 18, '', expensiveFunction()); + + + Então não há garantia de que a função cara não será executada. Se você + usar IFF(), o gerador de código o converte internamente em uma expressão de + dataset, garantindo que seja avaliado lentamente. + + Ver também: IF, MAP, EVALUATE, CASE, CHOOSE, SET diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IMPORT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IMPORT.xml index 1e57acf8a87..2108e19b57b 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IMPORT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-IMPORT.xml @@ -75,16 +75,13 @@ Exemplo: - IMPORT Python; - -INTEGER addthree(INTEGER p) := IMPORT(Python, 'python_mod_name.addThree'); - -//Java Example setting the classpath -IMPORT java; -STRING jcat(STRING a, STRING b) := - IMPORT(java, 'JavaCat.cat:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;' - : classpath('/opt/HPCCSystems/classes/')); -jcat('I',' concatenate'); + IMPORT Python3 AS Python; +// This example illustrates scalar parameters and resuls +integer add1(integer val) := EMBED(Python) + val+1 +ENDEMBED; +add1(27); //returns 28 + Ver também: IMPORT, Estrutura EMBED diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-INTFORMAT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-INTFORMAT.xml index 5d1fbc757f0..a06eb54bf09 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-INTFORMAT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-INTFORMAT.xml @@ -54,7 +54,7 @@ Exemplo: - val := 123456789; + val := 123456789; OUTPUT(INTFORMAT(val,20,1)); //formats as '00000000000123456789' OUTPUT(INTFORMAT(val,20,0)); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ISVALID.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ISVALID.xml index faf17bc8c01..8e182e6645e 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ISVALID.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ISVALID.xml @@ -42,7 +42,7 @@ Exemplo: - MyVal := IF(ISVALID(Infile.DecimalField),Infile.DecimalField,0); + MyVal := IF(ISVALID(Infile.DecimalField),Infile.DecimalField,0); //ISVALID returns TRUE if the value is legal Ver também: Estrutura TYPE, diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ITERATE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ITERATE.xml index 619c5eabb3b..2be7f9cb554 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ITERATE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-ITERATE.xml @@ -136,14 +136,16 @@ Exemplo: - ResType := RECORD + ResType := RECORD INTEGER1 Val; INTEGER1 Rtot; END; Records := DATASET([{1,0},{2,0},{3,0},{4,0}],ResType); + /* these are the recs going in: -Val Rtot +Val RTotal +---------- 1 0 2 0 3 0 @@ -155,27 +157,15 @@ ResType T(ResType L, ResType R) := TRANSFORM END; MySet1 := ITERATE(Records,T(LEFT,RIGHT)); +OUTPUT(MySet1); -/* these are the recs coming out: -Val Rtot +/* these are the recs coming out: +Val RTotal +---------- 1 1 2 3 3 6 4 10 */ - -//The following code outputs a running balance: -Run_bal := RECORD - Trades.trd_bal; - INTEGER8 Balance := 0; -END; -TradesBal := TABLE(Trades,Run_Bal); - -Run_Bal DoRoll(Run_bal L, Run_bal R) := TRANSFORM - SELF.Balance := L.Balance + IF(validmoney(R.trd_bal),R.trd_bal,0); - SELF := R; -END; - -MySet2 := ITERATE(TradesBal,DoRoll(LEFT,RIGHT)); See Also: Estrutura diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-JOIN.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-JOIN.xml index e8b4afd2ac4..878687b8125 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-JOIN.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-JOIN.xml @@ -4,15 +4,29 @@ JOIN - JOIN - JOIN - - JOIN function - (leftrecset, rightrecset, joincondition - [, - transform] [, - jointype] [, - joinflags] ) + + JOIN + JOIN + + JOIN function + ( + + leftrecset, rightrecset, joincondition + + [ + + , transform + + ] [ + + , jointype + + ] [ + + , joinflags + + ] ) + JOIN(setofdatasets, joincondition, transform, SORTED @@ -29,20 +43,26 @@ - leftrecset + + leftrecset + O conjunto esquerdo dos registros para processamento. - rightrecset + + rightrecset + O conjunto direito dos registros para processamento. Esse pode ser um INDEX. - joincondition + + joincondition + Uma expressão que especifica como combinar registros em leftrecset e rightrecset @@ -55,7 +75,9 @@ - transform + + transform + Opcional. A função TRANSFORM para acionar cada par de registros para processamento. Se omitida, JOIN retorna todos os @@ -65,7 +87,9 @@ - jointype + + jointype + Opcional. Se omitida, uma operação de junção interna; caso contrário, um dos tipos listados na seção Tipos de JOIN @@ -73,7 +97,9 @@ - joinflags + + joinflags + Opcional. Qualquer opção (consulte a seção JOIN Options [OPÇÕES DE JOIN] abaixo) para especificar exatamente como a operação @@ -81,7 +107,9 @@ - setofdatasets + + setofdatasets + O SET de conjuntos de registro para processamento ([idx1,idx2,idx3]), normalmente INDEXes (ÍNDiCES), em que todos @@ -89,7 +117,9 @@ - SORTED + + SORTED + Especifica a ordem de classificação de registros no setofdatasets de entrada, além da ordem de @@ -97,7 +127,9 @@ - fields + + fields + Uma lista delimitada por vírgulas dos campos no setofdatasets, que precisa ser um subconjunto @@ -123,12 +155,25 @@ JOIN em Dois Datasets - JOIN(leftrecset, - rightrecset, joincondition [, transform] [, jointype] [, joinflags] ) + + JOIN( + + leftrecset, rightrecset, joincondition + + [ + + , transform + + ] [ + + , jointype + + ] [ + + , joinflags + + ] ) + A primeira forma de JOIN processa todos os pares de registros em leftrecset e @@ -245,7 +290,7 @@ (n) ] [, ATMOST ATMOST - ( ([ condition, ] n ) ] [, LIMIT @@ -278,8 +323,9 @@ - PARTITION LEFT | - RIGHT + + PARTITION LEFT | RIGHT + Especifica qual recordset proporciona os pontos de partição que determinam como os registros são classificados e distribuídos @@ -290,28 +336,37 @@ - [MANY] LOOKUP - - Especifica o rightrecset , sendo um - arquivo relativamente pequeno de registros de consulta que podem - ser copiados completamente para cada nó. MANY não estiver - presente, os registros rightrecset têm uma - relação de muitos para 0/1 com os registros em - leftrecset (para cada registro em - leftrecset há no máximo 1 registro em - rightrecset. Se MANY estiver presente, os - registros rightrecset têm uma relação de - muitos para 0/muitos com os registros em - leftrecset. Essa opção permite que o + + [MANY] LOOKUP + + + Especifica que o rightrecsetis é um + arquivo relativamente pequeno de registros de pesquisa. Se a opção + LOCAL não estiver presente, uma tabela hash de todo o + rightrecset será totalmente copiada para cada + nó, mas se a opção LOCAL estiver presente, a tabela hash será + criada localmente em cada nó. Se MANY não estiver presente, os + registros rightrecset terão um relacionamento + Many to 0/1 com os registros no leftrecset + (para cada registro no rightrecset há no + máximo 1 registro no rightrecset, imposto por + uma desduplicação implícita se houver registros duplicados na + tabela de pesquisa com base nos campos-chave usados na + joincondition). Se MANY estiver presente, os + registros do rightrecset terão um + relacionamento Muitos para 0/Muitos com os registros no + leftrecset. Esta opção permite que o otimizador evite a classificação desnecessária do leftrecset. Válido apenas para os - jointypes internos, LEFT OUTER ou LEFT ONLY. - As opções ATMOST, LIMIT e KEEP são suportadas em conjunto com - MANYLOOKUP. + jointypes inner, LEFT OUTER ou LEFT ONLY. As + opções ATMOST, LIMIT e KEEP são suportadas em conjunto com MANY + LOOKUP. - SMART + + SMART + Especifica para usar uma consulta na memória quando possível, mas usa uma operação de junção distribuída se o dataset @@ -319,7 +374,9 @@ - FEW + + FEW + Especifica que o LOOKUP rightrecset possui poucos registros, de forma que pouca memória é utilizada, @@ -328,7 +385,9 @@ - GROUPED + + GROUPED + Especifica a mesma ação de MANY LOOKUP, mas preserva o agrupamento Usado principalmente no motor de entrega rápida de @@ -338,7 +397,9 @@ - ALL + + ALL + Especifica que o rightrecset é um arquivo pequeno que pode ser copiado completamente para cada nó, o @@ -351,7 +412,9 @@ - NOSORT + + NOSORT + Realiza o JOIN sem classificar dinamicamente as tabelas. Isso implica que leftrecset e/ou @@ -362,7 +425,9 @@ - which + + which + Opcional. As palavras-chave LEFT ou RIGHT para indicar que leftrecset ou @@ -373,14 +438,18 @@ - KEYED + + KEYED + Especifica o uso de acesso indexado em rightrecset (consulte INDEX). - index + + index + Opcional. O nome de um INDEX no rightrecset para um JOIN full-keyed (consulte @@ -390,7 +459,9 @@ - UNORDERED + + UNORDERED + Opcional. Especifica que a operação KEYED JOIN não preserva a ordem de classificação do @@ -398,7 +469,9 @@ - LOCAL + + LOCAL + Especifica que a operação é realizada em cada nó de supercomputador de forma independente, sem exigir interação com @@ -407,7 +480,9 @@ - HASH + + HASH + Especifica um DISTRIBUTE implícito do leftrecset e rightrecset @@ -417,7 +492,9 @@ - KEEP(n) + + KEEP(n) + Especifica o número máximo de registros correspondentes(n) a serem gerados no conjunto de resultados de cada registro @@ -430,7 +507,9 @@ - ATMOST + + ATMOST + Especifica o número máximo de registros correspondentes que, se excedido, elimina todas essas correspondências do conjunto @@ -456,21 +535,27 @@ - condition + + condition + Uma parte da expressão joincondition . - n + + n + Especifica o número máximo de correspondências permitidas. - LIMIT + + LIMIT + Especifica o número máximo de registros correspondentes que, se excedido, ocasiona a falha da workunit ou elimina todas @@ -486,31 +571,39 @@ rightrecset correspondentes), enquanto LIMIT faria com que toda a workunit falhasse ou executaria o SKIP no registro (eliminando o registro leftrecset - totalmente do resultado). Se omitido, o padrão é LIMIT(10000). O - LIMIT é aplicado ao record set que atende à parte de - correspondência rígida ("equality") da - joincondition , porém antes de a - correspondência suave ("desigualdade") da - joincondition ser avaliada. + totalmente do resultado). O LIMIT é aplicado ao conjunto de + registros que atendem à parte de correspondência difícil + ("igualdade") do joinconditio, mas antes da + parte de correspondência suave ("não igualdade") da + joincondition é avaliado. Se omitido, o + padrão é LIMIT(10000). O limite implícito só é adicionado se não + houver LIMIT explícito, ATMOST e KEEP, ou se tiver um filtro sem + chave e não para um JOIN somente esquerdo. - value + + value + O número máximo de correspondências permitido; LIMIT(0) é ilimitado. - SKIP + + SKIP + - Opcional. Especifica a eliminação de registros - correspondentes que ultrapassam o valor máximo do resultado LIMIT, - em vez da falha da workunit. + Opcional. Especifica a eliminação de todos os registros + correspondentes cujo número total excede o valor máximo do + resultado LIMIT em vez de falhar no job. - transform + + transform + Opcional. Especifica a emissão de um registro único produzido por transform em vez da falha da @@ -518,14 +611,18 @@ - FAIL + + FAIL + Opcional. Especifica o uso do FAIL ação para configurar a mensagem de erro quando a workunit falha. - SKEW + + SKEW + Indica que você sabe que os dados para essa junção não serão espalhados uniformemente entre os nós (serão distorcidos @@ -538,7 +635,9 @@ - limit + + limit + Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima da distorção a ser permitida antes que a @@ -546,7 +645,9 @@ - target + + target + Opcional. Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima desejada da distorção a ser @@ -554,7 +655,9 @@ - THRESHOLD + + THRESHOLD + Indica o tamanho mínimo de uma parte única do leftrecset ou @@ -565,28 +668,36 @@ - size + + size + Um valor inteiro indicando o número mínimo de bytes para uma parte única. - UNORDERED + + UNORDERED + Opcional. Especifica que a ordem do registro de resultado não é importante. - ORDERED + + ORDERED + Especifica a importância da ordem do registro de resultado. - bool + + bool + Quando for False, especifica que a ordem do registro de resultado não é importante. Quando for True, especifica a ordem @@ -594,41 +705,53 @@ - STABLE + + STABLE + Opcional. Especifica que a ordem do registro de entrada é importante. - UNSTABLE + + UNSTABLE + Opcional. Especifica que a ordem do registro de entrada não é importante. - PARALLEL + + PARALLEL + Opcional. Tenta avaliar essa atividade em paralelo. - numthreads + + numthreads + Opcional. Tenta avaliar essa atividade usando os threads numthreads . - ALGORITHM + + ALGORITHM + Opcional. Substitui o algoritmo usado para essa atividade. - name + + name + O algoritmo a ser usado para essa atividade. Precisa fazer parte da lista de algoritmos compatíveis com as opções STABLE e @@ -664,17 +787,39 @@ Se aparecer um erro similar a esse: - “error: 1301: Pool memory exhausted: - memory exhausted + + “error: 1301: Pool memory exhausted: + memory exhausted Pool memory exhausted - ..." + ..." + significa que o rightrecset é muito grande e uma operação LOOKUP JOIN não deve ser usada. Uma operação SMART JOIN pode ser uma boa opção neste caso. + Examplo: + + + //this example demos the implicit DEDUP of the lookup dataset +r1 := {INTEGER1 fred}; +r2 := {INTEGER1 fred,INTEGER1 sue}; +ds1 := DATASET([1,2,3,4],r1); +ds2 := DATASET([{1,2},{2,2}, + {1,1},{2,1}, + {3,1},{4,1}],r2); +r2 XF(ds1 L, ds2 R) := TRANSFORM + SELF.fred := L.fred; + SELF.sue := R.sue; +END; +JOIN(ds1,ds2, + LEFT.Fred = RIGHT.fred, + XF(LEFT,RIGHT),LOOKUP); + + + JOINS KEYED<indexterm> <primary>Keyed JOIN</primary> @@ -711,8 +856,10 @@ <para>A operação JOIN segue a seguinte lógica:</para> - <para><emphasis role="bold">1. Classificação/distribuição de registro para - obter possíveis correspondências nos mesmos nós.</emphasis></para> + <para> + <emphasis role="bold">1. Classificação/distribuição de registro para + obter possíveis correspondências nos mesmos nós.</emphasis> + </para> <para>As opções PARTITION LEFT, PARTITION RIGHT, LOOKUP, ALL, NOSORT, KEYED, HASH e LOCAL indicam como isso acontece. Essas opções são @@ -722,8 +869,9 @@ <emphasis>rightrecset</emphasis> pela <emphasis>joincondition</emphasis>.</para> - <para><emphasis role="bold">2. Correspondência de - registros.</emphasis></para> + <para> + <emphasis role="bold">2. Correspondência de registros.</emphasis> + </para> <para>A <emphasis>joincondition</emphasis>, LIMIT e ATMOST determinam como isso é feito.</para> @@ -738,27 +886,38 @@ limite KEEP especificado OU o JOIN que tem um postfilter<emphasis role="bold">)</emphasis>.</para> - <para><emphasis role="bold">3. Determina quais correspondências devem ser - especificadas para </emphasis><emphasis - role="bold">transform</emphasis><emphasis role="bold">.</emphasis></para> + <para> + <emphasis role="bold">3. Determina quais correspondências devem ser + especificadas para</emphasis> + + <emphasis role="bold">transform</emphasis> + + <emphasis role="bold">.</emphasis> + </para> <para>O <emphasis>jointype</emphasis> determina isso.</para> - <para><emphasis role="bold">4. Gera registros de resultados através da - função TRANSFORM.</emphasis></para> + <para> + <emphasis role="bold">4. Gera registros de resultados através da função + TRANSFORM.</emphasis> + </para> <para>O parâmetro <emphasis>transform</emphasis> implícito ou explícito determina isso.</para> - <para><emphasis role="bold">5. Filtrar registros de resultados com - SKIP.</emphasis></para> + <para> + <emphasis role="bold">5. Filtrar registros de resultados com + SKIP.</emphasis> + </para> <para>Se <emphasis>transform</emphasis> para um par de registros resultar em SKIP, então o registro de resultado não é contado em nenhum total da opção KEEP.</para> - <para><emphasis role="bold">6. Limitar registros de resultados com - KEEP.</emphasis></para> + <para> + <emphasis role="bold">6. Limitar registros de resultados com + KEEP.</emphasis> + </para> <para>Quaisquer registros de resultados para um determinado registro <emphasis>leftrecset</emphasis> acima e além do valor KEEP permitido são @@ -865,9 +1024,9 @@ </tgroup> </informaltable> - <para>Exemplo:</para> + <para>Exemplos:</para> - <programlisting>outrec := RECORD + <programlisting lang="ECL">outrec := RECORD people.id; people.firstname; people.lastname; @@ -965,14 +1124,18 @@ SEQUENTIAL(PtblOut,Bld1,Bld2,OUTPUT(FilledRecs1),OUTPUT(FilledRecs2)) </emphasis><emphasis role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name </emphasis><emphasis role="bold">) ] )</emphasis></para> - <para><emphasis role="bold"><emphasis>A segunda forma de JOIN é similar à - função MERGEJOIN <indexterm> - <primary>MERGEJOIN function</primary> - </indexterm><indexterm> - <primary>JOIN</primary> - </indexterm> no sentido de que usa um SET OF DATASETs como o seu - primeiro parâmetro. Isso oferece a possibilidade de unir mais de dois - datasets em uma única operação.</emphasis></emphasis></para> + <para> + <emphasis role="bold"> + <emphasis>A segunda forma de JOIN é similar à função MERGEJOIN + <indexterm> + <primary>MERGEJOIN function</primary> + </indexterm><indexterm> + <primary>JOIN</primary> + </indexterm> no sentido de que usa um SET OF DATASETs como o seu + primeiro parâmetro. Isso oferece a possibilidade de unir mais de dois + datasets em uma única operação.</emphasis> + </emphasis> + </para> </sect2> <sect2 id="Matching_Logic_joincondition"> @@ -1096,7 +1259,7 @@ SEQUENTIAL(PtblOut,Bld1,Bld2,OUTPUT(FilledRecs1),OUTPUT(FilledRecs2)) <para>Exemplo:</para> - <programlisting>Rec := RECORD,MAXLENGTH(4096) + <programlisting id="ECL" role="runnable">Rec := RECORD,MAXLENGTH(4096) STRING1 Letter; UNSIGNED1 DS; UNSIGNED1 Matches := 0; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-NOTIFY.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-NOTIFY.xml index 425c97d4c85..93467e646fa 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-NOTIFY.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-NOTIFY.xml @@ -67,30 +67,24 @@ <para>Exemplo:</para> - <programlisting>NOTIFY('testevent', 'foobar'); - -receivedFileEvent(STRING name) := EVENT('ReceivedFile', name); -NOTIFY(receivedFileEvent('myfile')); - -//as a service -doMyService := FUNCTION -OUTPUT('Did a Service for: ' + 'EVENTNAME=' + EVENTNAME); -NOTIFY(EVENT('MyServiceComplete', -'<Event><returnTo>FRED</returnTo></Event>'), -EVENTEXTRA('returnTo')); -RETURN EVENTEXTRA('returnTo'); + <programlisting>doMyService := FUNCTION + O := OUTPUT('Did a Service for: ' + 'EVENTNAME=' + EVENTNAME); + N := NOTIFY(EVENT('MyServiceComplete', + '<Event><returnTo>FRED</returnTo></Event>'), + EVENTEXTRA('returnTo')); + RETURN WHEN(EVENTEXTRA('returnTo'),ORDERED(O,N)); END; - -doMyService : WHEN('MyService'); -// and a call to the service +OUTPUT(doMyService) : WHEN('MyService'); + +// and a call (in a separate workunit): NOTIFY('MyService', -'<Event><returnTo>'+WORKUNIT+'</returnTo>....</Event>'); + '<Event><returnTo>'+ WORKUNIT + '</returnTo></Event>'); WAIT('MyServiceComplete'); OUTPUT('WORKUNIT DONE') </programlisting> </informalexample> - <para>Ver também: <link linkend="EVENT">EVENT</link>, <link + <para>See Also: <link linkend="EVENT">EVENT</link>, <link linkend="EVENTNAME">EVENTNAME</link>, <link linkend="EVENTEXTRA">EVENTEXTRA</link>, <link linkend="CRON">CRON</link>, <link linkend="WHEN">WHEN</link>, <link linkend="WAIT">WAIT</link></para> diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-PARSE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-PARSE.xml index 7d324eb57bb..2daf599870c 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-PARSE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-PARSE.xml @@ -461,7 +461,7 @@ results := RECORD STRING30 RelationPhrase := MatchText(relationtype); END; outfile1 := PARSE(datafile,line,progeny,results,SCAN ALL); -</programlisting> +OUTPUT(outfile1);</programlisting> </sect2> <sect2 id="PARSE_XML_Data"> @@ -541,7 +541,7 @@ outrec t(lineRec L) := TRANSFORM END; textout := PARSE(in1, line, t(LEFT), XML('/ENTITY[@type="PERSON"]')); -</programlisting> +OUTPUT(textout);</programlisting> <para>Ver também: <link linkend="DATASET">DATASET</link>, <link linkend="OUTPUT">OUTPUT</link>, <link @@ -611,11 +611,11 @@ outfile := OUTPUT(outfile); </programlisting> - <para>Este exemplo analisa um subconjunto pequeno de dados não processados - de filmes (disponíveis gratuitamente em IMDB.com) em campos de base de - dados padrão:</para> + <para>Este exemplo analisa um pequeno subconjunto de dados brutos de + filmes em campos padrão do banco de dados:</para> - <programlisting>Layout_Actors_Raw := RECORD + <programlisting>IMPORT Std; +Layout_Actors_Raw := RECORD STRING120 IMDB_Actor_Desc; END; @@ -709,5 +709,63 @@ NLP_Actor_Movie := ITERATE(Actor_Movie_Init,IterNames(LEFT,RIGHT)); // and output the result set OUTPUT(NLP_Actor_Movie); </programlisting> + + <para>An example of Tomita Parsing (using SELF):</para> + + <para><programlisting>//an example of Tomita Parsing (using SELF): + +r1 := RECORD + STRING value; +END; +ds := DATASET([{'1'},{'222+33*(1+2+(1))'}], r1); + +TOKEN val := PATTERN('[0-9]')+; +RULE expr := SELF '*' SELF | SELF '+' SELF | SELF '(' SELF ')' | val; + +parsed_record := RECORD + STRING result := MATCHTEXT(expr); +END; + +PARSE(ds, value, expr, parsed_record,PARSE); +</programlisting></para> + + <para>Outro exemplo de análise do Tomita:</para> + + <para><programlisting>// This example demonstrates the use of productions in PARSE code +//(only supported in the Tomita version of PARSE) + +PATTERN ws := ['','\t']; +TOKEN number := PATTERN('[0-9]+'); +TOKEN plus := '+'; +TOKEN minus := '-'; +attrRec := RECORD //record structure for Tomita parsing + INTEGER val; +END; +RULE(attrRec) e0 := '(' USE(attrRec,expr)? ')' //USE = forward reference to "expr" definition + | number TRANSFORM(attrRec, SELF.val := (INTEGER)$1;) + | minus SELF TRANSFORM(attrRec, SELF.val := -$2.val;); + +RULE(attrRec) e1 := e0 + | SELF '*' e0 TRANSFORM(attrRec, SELF.val := $1.val * $3.val;) + | SELF '/' e0 TRANSFORM(attrRec, SELF.val := $1.val / $3.val;); +RULE(attrRec) e2 := e1 + | SELF plus e1 TRANSFORM(attrRec, SELF.val := $1.val + $3.val;) + | SELF minus e1 TRANSFORM(attrRec, SELF.val := $1.val - $3.val;); +RULE(attrRec) expr := e2; +infile := DATASET([{'1+2*3'},{'1+2*100'},{'1+2+(3+4)*4/2'},{'-4*5'}], { STRING line }); +resultsRec := RECORD + RECORDOF(infile); + attrRec; + STRING exprText; + INTEGER value3; +END; +resultsRec extractResults(infile L, attrRec attr) := TRANSFORM + SELF := L; + SELF := attr; + SELF.exprText := MATCHTEXT; + SELF.value3 := MATCHROW(e0[3]).val; +END; +OUTPUT(PARSE(infile,line,expr,extractResults(LEFT, $1),FIRST,WHOLE,PARSE,SKIP(ws+))); +</programlisting></para> </sect2> </sect1> diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SET.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SET.xml index 00a2d898a9c..58dde8092fb 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SET.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SET.xml @@ -8,8 +8,8 @@ <primary>SET</primary> </indexterm><indexterm> <primary>SET function</primary> - </indexterm>(</emphasis><emphasis>recordset, field</emphasis> <emphasis - role="bold">[, UNORDERED | ORDERED(</emphasis> <emphasis>bool + </indexterm>(</emphasis><emphasis>recordset, expression</emphasis> + <emphasis role="bold">[, UNORDERED | ORDERED(</emphasis> <emphasis>bool </emphasis><emphasis role="bold">) ] [, STABLE | UNSTABLE ] [, PARALLEL [ (</emphasis> <emphasis>numthreads </emphasis><emphasis role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name </emphasis><emphasis role="bold">) ] @@ -29,6 +29,13 @@ derivado.</entry> </row> + <row> + <entry><emphasis>expression</emphasis></entry> + + <entry>A expressão da qual obter os valores, normalmente apenas um + campo no recordset.</entry> + </row> + <row> <entry><emphasis>field</emphasis></entry> @@ -163,7 +170,11 @@ s2; //results in ['D','X','C','E','B'] //sorted unique elements s3 := SET(SORT(t,Ltr),Ltr); COUNT(s3); //results in 5 -s3; //results in ['B','C','D','E','X']</programlisting> +s3; //results in ['B','C','D','E','X'] + +//a SET of expression values: +s4 := SET(ds,Ltr+Val); +s4; // results in ['X1','B3','C2','B5','C4','D6','E2']</programlisting> <para>Ver também: <link linkend="Recordset_Filtering">Conjuntos e Filtros</link>, <link linkend="SET_OF">SET OF</link>, <link diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SOAPCALL.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SOAPCALL.xml index 9b53bb1eaaf..045aeb04d6c 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SOAPCALL.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-SOAPCALL.xml @@ -186,7 +186,7 @@ <entry><emphasis>numthreads</emphasis></entry> <entry>Opcional. Tenta avaliar essa atividade usando - <emphasis>numthreads</emphasis> threads</entry> + <emphasis>numthreads</emphasis> threads por nó.</entry> </row> <row> @@ -296,9 +296,9 @@ <primary>PARALLEL</primary> </indexterm>(<emphasis>n</emphasis>)</entry> - <entry>Especifica o número de threads simultâneas – para processar - as consultas do Motor de entrega de dados – para no máximo 50 (o - padrão é 2). Isso busca limitar o número de sessões + <entry>Especifica o número de threads por nós simultâneos – para + processar as consultas do Motor de entrega de dados – para no + máximo 50 (o padrão é 2). Isso busca limitar o número de sessões simultâneas.</entry> </row> @@ -384,10 +384,12 @@ <row> <entry><emphasis role="bold">LOG - </emphasis>(<emphasis>expression</emphasis>)</entry> + </emphasis>(<emphasis>start_expression, + end_expression</emphasis>)</entry> - <entry>Especifica adicionar a expressão no log ao desempenhar um - SOAPCALL.</entry> + <entry>Especifica a inclusão de start_expression no log quando um + SOAPCALL começar e a inclusão de end_expression no log quando um + SOAPCALL terminar.</entry> </row> <row> diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TABLE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TABLE.xml index 93270e2bb2e..75686c04187 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TABLE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TABLE.xml @@ -138,7 +138,7 @@ <entry>Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima de distorção a ser permitida antes que a tarefa - falhe (a distorção padrão é 1,0 / <número de escravos no + falhe (a distorção padrão é 1,0 / <número de secundários no cluster>).</entry> </row> @@ -147,7 +147,7 @@ <entry>Opcional. Um valor entre zero (0) e um (1,0 = 100%) indicando a porcentagem máxima de distorção desejada a ser - permitida (a distorção padrão é 1,0 / <número de escravos no + permitida (a distorção padrão é 1,0 / <número de secundários no cluster>).</entry> </row> diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRACE.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRACE.xml index abd7e364e13..fc12e696605 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRACE.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRACE.xml @@ -42,8 +42,8 @@ </informaltable></para> <para>A expressão <emphasis role="bold"> TRACE </emphasis> define o - rastreamento para os arquivos de log (logs escravos do Thor, logs do hThor - logs, ou logs do Roxie).</para> + rastreamento para os arquivos de log (logs secundários do Thor, logs do + hThor logs, ou logs do Roxie).</para> <para>Você pode adicionar TRACE ao seu código em pontos críticos sem que o desempenho sofra nenhum impacto. Posteriormente, se precisar investigar o diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRIM.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRIM.xml index e87830aaa0b..578649edab1 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRIM.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/BltInFunc-TRIM.xml @@ -28,11 +28,19 @@ <row> <entry><emphasis>flag</emphasis></entry> - <entry>Opcional. Especifica quais espaços serão removidos. Os - valores válidos do indicador são: RIGHT (remove espaços à direita - – este é o padrão), LEFT (remove espaços à esquerda), LEFT, RIGHT - (remove espaços à direita e à esquerda), e ALL (remove todos os - espaços, até mesmo aqueles dentro de string_value).</entry> + <entry>Opcional. Especifique quais espaços serão removidos. Os + valores das flags válidos são:<para/><para><emphasis + role="bold">RIGHT</emphasis> (remover espaços à direita - este é o + padrão</para><para><emphasis role="bold">LEFT</emphasis> (remover + espaços à esquerda)</para><para><emphasis role="bold">LEFT, + RIGHT</emphasis> (remover espaços à esquerda e à + direita)</para><para><emphasis role="bold">ALL</emphasis> (remover + espaços à esquerda e à direita)todos os espaços, mesmo aqueles + dentro de string_value)</para><para><emphasis + role="bold">WHITESPACE</emphasis> Usado em conjunto com qualquer + um dos outros sinalizadores, remove TODOS os caracteres de espaço + em branco da área especificada. Se omitido, apenas o caractere de + espaço (0x20) será removido.</para></entry> </row> <row> diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-BetweenOps.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-BetweenOps.xml index a4c52e3dc69..2ba1ea18f23 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-BetweenOps.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-BetweenOps.xml @@ -50,7 +50,7 @@ <para>Exemplo:</para> - <programlisting>X := 10; + <programlisting lang="ECL" role="runnable">X := 10; Y := 20; Z := 15; @@ -60,7 +60,10 @@ IsInRange := Z BETWEEN X AND Y; IsNotInRange := Z NOT BETWEEN X AND Y; //This code is directly equivalent to: - // IsInNotRange := NOT (Z >= X AND Z <= Y);</programlisting> + // IsInNotRange := NOT (Z >= X AND Z <= Y); +OUTPUT(IsInRange); +OUTPUT(IsNotInRange); +</programlisting> <para>Ver também: <link linkend="Logical_Operators">Operadores Lógicos</link>, <link linkend="Comparison_Operators">Operadores de diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-InOps.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-InOps.xml index 5e282020b20..a4ea5cc0d9a 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-InOps.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-InOps.xml @@ -42,9 +42,9 @@ conjunto, resultando em um retorno booleano. O uso de IN é muito mais eficiente do que sua expressão equivalente OR .</para> - <para>Exemplo:</para> + <para>Exemplos:</para> - <programlisting>ABCset := ['A', 'B', 'C']; + <programlisting lang="ECL">ABCset := ['A', 'B', 'C']; IsABCStatus := Person.Status IN ABCset; //This code is directly equivalent to: // IsABCStatus := Person.Status = 'A' OR @@ -63,6 +63,11 @@ SomeFile := DATASET([{'A'},{'B'},{'C'},{'D'},{'E'}, x := SET(SomeFile(Letter > 'C'),Letter); y := 'A' IN x; //results in FALSE z := 'D' IN x; //results in TRUE +</programlisting> + + <para>DICTIONARY examples:</para> + + <programlisting lang="ECL" role="runnable">//DICTIONARY examples: //DICTIONARY examples: rec := {STRING color,UNSIGNED1 code}; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-RecordSetOps.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-RecordSetOps.xml index bcb927457d5..9493b4570f0 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-RecordSetOps.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Expr-RecordSetOps.xml @@ -46,7 +46,7 @@ <para>Exemplo:</para> - <programlisting>MyLayout := RECORD + <programlisting lang="ECL" role="runnable">MyLayout := RECORD UNSIGNED Num; STRING Number; END; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ExpressionsandOperatos.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ExpressionsandOperatos.xml index 2425bd6d4c2..059743a0f23 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ExpressionsandOperatos.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ExpressionsandOperatos.xml @@ -313,8 +313,10 @@ <para>O operador “Maior ou igual a” <emphasis role="underline">deve</emphasis> primeiramente apresentar o sinal “Maior que” (>). Para a expressão a <=> b, o operador de comparação de - equivalência retorna -1 se a<b, 0 se a=b, e 1 se a>b. Quando as - STRINGs são comparadas quanto à equivalência, os espaços atrás são - ignorados.</para> + equivalência retorna -1 se a<b, 0 se a=b, e 1 se a>b. Quando STRINGs + são comparadas, os espaços finais geralmente são ignorados. Funções de + biblioteca padrão, como Std.Str.Find(), podem considerar espaços finais. + Consulte a Referência da Biblioteca Padrão para obter detalhes + específicos</para> </sect2> </sect1> diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-NLPRecrd.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-NLPRecrd.xml index cf90adb7aed..19d6234710c 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-NLPRecrd.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-NLPRecrd.xml @@ -95,7 +95,7 @@ <para>Exemplo:</para> - <programlisting>PATTERN ws := PATTERN('[ \t\r\n]'); + <programlisting lang="ECL">PATTERN ws := PATTERN('[ \t\r\n]'); PATTERN arb := PATTERN('[-!.,\t a-zA-Z0-9]')+; PATTERN number := PATTERN('[0-9]')+; PATTERN age := '(' number OPT('/I') ')'; @@ -111,8 +111,11 @@ NLP_layout_actor_movie := RECORD STRING20 movie_role := MATCHTEXT(role/arb); //arb within role UNSIGNED1 cast_rank := (UNSIGNED)MATCHTEXT(m_rank/number); END; - -// This example demonstrates the use of productions in PARSE code +</programlisting> + + <para>Exemplo Tomita:</para> + + <programlisting lang="ECL" role="runnable">// This example demonstrates the use of productions in PARSE code //(only supported in the tomita version of PARSE). PATTERN ws := [' ','\t']; TOKEN number := PATTERN('[0-9]+'); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-PARSPattrn.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-PARSPattrn.xml index 605a17ac2b9..527541b18bf 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-PARSPattrn.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ParSppt-PARSPattrn.xml @@ -138,13 +138,13 @@ <para>1. Se não houver padrão, a transform padrão limpará a linha. Por exemplo:</para> - <programlisting>RULE(myRecord) := ; //empty expression = cleared row</programlisting> + <programlisting lang="ECL">RULE(myRecord) := ; //empty expression = cleared row</programlisting> <para>2. Se houver apenas um único padrão com um registro associado, e esse registro corresponder com o tipo de regra que está sendo definido. Por exemplo:</para> - <programlisting>RULE(myRecord) e0 := '(' USE(myRecord, 'expression') ')';</programlisting> + <programlisting lang="ECL">RULE(myRecord) e0 := '(' USE(myRecord, 'expression') ')';</programlisting> </blockquote> <sect2 id="ParsePattern_Definitions"> @@ -404,7 +404,7 @@ <entry><emphasis role="bold">PATTERN</emphasis>('<emphasis>regular expression</emphasis></entry> - <entry><programlisting role="tab">Define um padrão usando a <emphasis>expressão regular </emphasis>constituída a partir + <entry><programlisting lang="text" role="tab">Define um padrão usando a <emphasis>expressão regular </emphasis>constituída a partir dos seguintes elementos de sintaxe suportados: (x) Agrupamento (não deve ser usado para correpondência) x|y Alterativos x ou y xy @@ -429,7 +429,7 @@ PATTERN AnyChar := PATTERN(U'[\u0001-\u7fff]'); <row> <entry/> - <entry><programlisting role="tab">As seguintes expressões de classes de caractere são suportadas + <entry><programlisting lang="text" role="tab">As seguintes expressões de classes de caractere são suportadas (dentro dos conjuntos): [:alnum:] [:cntrl:] [:lower:] [:upper:] [:space:] [:alpha:] [:digit:] [:print:] [:blank:] [:graph:] @@ -439,7 +439,7 @@ PATTERN AnyChar := PATTERN(U'[\u0001-\u7fff]'); <row> <entry/> - <entry><programlisting role="tab"><emphasis>Expressões regulares</emphasis> não suportam + <entry><programlisting lang="text" role="tab"><emphasis>Expressões regulares</emphasis> não suportam ^ $ para marcar o início/fim dos símbolos de agrupamento da string [.ch.] Equivalence<indexterm> @@ -475,7 +475,7 @@ PATTERN AnyChar := PATTERN(U'[\u0001-\u7fff]'); <para>Exemplos:</para> - <programlisting>rs := RECORD + <programlisting lang="ECL" role="runnable">rs := RECORD STRING100 line; END; ds := DATASET([{'the fox; and the hen'}], rs); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/RecordStructure.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/RecordStructure.xml index b14ccba5750..855707c6de9 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/RecordStructure.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/RecordStructure.xml @@ -136,7 +136,8 @@ <emphasis>condição</emphasis> referenciar os <emphasis>campos</emphasis> no RECORD que precede o IFBLOCK, essas referências devem usar SELF. antes do nome do campo para desambiguar - a referência.</entry> + a referência. Isto é apenas para uso em estruturas RECORD que + definem arquivos no disco.</entry> </row> <row> @@ -177,6 +178,12 @@ definições de campo em uma estrutura RECORD pode ser na forma de ponto e vírgula (;) ou apenas vírgula (,).</para> + <para>IFBLOCK e tipos de dados alienígenas (TYPE) só devem ser usados ao + acessar arquivos de dados externos. É muito mais eficiente usar os tipos + nativos para processamento geral. Em particular, algumas otimizações para + projetar e filtrar arquivos remotamente não são suportadas em IFBLOCKs e + tipos de dados alienígenas.</para> + <sect2 id="In-line_Record_Definitions"> <title>Definições de Registro em Linha @@ -459,7 +466,7 @@ Exemplo: - R1 := {STRING1 F1,STRING1 F2,STRING1 F3,STRING1 F4,STRING1 F5}; + R1 := {STRING1 F1,STRING1 F2,STRING1 F3,STRING1 F4,STRING1 F5}; R2 := {STRING1 F4,STRING1 F5,STRING1 F6}; R3 := {R1 AND R2}; //Intersection - fields F4 and F5 only R4 := {R1 OR R2}; //Union - all fields F1 - F6 @@ -735,21 +742,21 @@ END; Estes operadores são válidos para comparações: - <, <=, >, >=, =, != + <, <=, >, >=, =, != Um exemplo de xpath suportado: - /a/*/c*/*d/e[@attr]/f[child]/g[@attr="x"]/h[child>="5"]/i[@x!="2"]/j + /a/*/c*/*d/e[@attr]/f[child]/g[@attr="x"]/h[child>="5"]/i[@x!="2"]/j É possível emular as condições AND da seguinte forma: - /a/b[@x="1"][@y="2"] + /a/b[@x="1"][@y="2"] Adicionalmente, há uma conversão não padronizada de XPATH para extrair o texto de uma correspondência usando colchetes angulares vazios (<>): - R := RECORD + R := RECORD STRING blah{xpath('a/b<>')}; //contains all of b, including any child definitions and values END; @@ -769,7 +776,7 @@ END; identifier (identificador) de caixa baixa do campo. - STRING name; //matches: <name>Kevin</name> + STRING name; //matches: <name>Kevin</name> STRING Fname{xpath('Fname')}; //matches: <Fname>Kevin</Fname> 2) Para um campo cujo tipo é uma estrutura RECORD, o XPATH @@ -778,7 +785,7 @@ STRING Fname{xpath('Fname')}; //matches: <Fname>Kevin</Fname> - NameRec := RECORD + NameRec := RECORD STRING Fname{xpath('Fname')}; //matches: <Fname>Kevin</Fname> STRING Mname{xpath('Mname')}; //matches: <Mname>Alfonso</Mname> STRING Lname{xpath('Lname')}; //matches: <Lname>Jones</Lname> @@ -801,7 +808,7 @@ END; do campo em caixa baixa, e o valor padrão do Repeated será “Row”. Por exemplo, isso demonstra "Container/Repeated": - DATASET(PeopleNames) People{xpath('people/name'])}; + DATASET(PeopleNames) People{xpath('people/name'])}; /*matches: <people> <name>Gavin</name> <name>Ricardo</name> @@ -809,14 +816,14 @@ END; Isso demonstra "/Repeated": - DATASET(Names) Names{xpath('/name'])}; + DATASET(Names) Names{xpath('/name'])}; /*matches: <name>Gavin</name> <name>Ricardo</name> */ "Container" e "Repeated" também podem conter filtros xpath, como estes: - DATASET(doctorRec) doctors{xpath('person[@job=\'doctor\']')}; + DATASET(doctorRec) doctors{xpath('person[@job=\'doctor\']')}; /*matches: <person job='doctor'> <FName>Kevin</FName> <LName>Richards</LName> @@ -831,7 +838,7 @@ END; terceira forma permite fazer a leitura de valores de atributos em XML. - SET OF STRING people; + SET OF STRING people; //matches: <people><All/></people> //or: <people><Item>Kevin</Item><Item>Richard</Item></people> @@ -870,13 +877,13 @@ SET OF STRING Xpeople{xpath('/Name/@id')}; preciso especificar apenas o tipo de valor e nome de cada campo no layout: - R1 := RECORD + R1 := RECORD UNSIGNED1 F1; //only value type and name required UNSIGNED4 F2; STRING100 F3; END; -D1 := DATASET('RTTEMP::SomeFile',R1,THOR); +D1 := DATASET('LR::SomeFile',R1,THOR); @@ -884,7 +891,7 @@ D1 := DATASET('RTTEMP::SomeFile',R1,THOR); Para TABLE de “fatia vertical”, é preciso especificar o tipo de valor, nome e origem de dados para cada campo no layout: - R2 := RECORD + R2 := RECORD UNSIGNED1 F1 := D1.F1; //value type, name, data source all explicit D1.F2; //value type, name, data source all implicit END; @@ -893,7 +900,7 @@ T1 := TABLE(D1,R2); Para TABLE de relatório de tabela de referência cruzada: - R3 := RECORD + R3 := RECORD D1.F1; //"group by" fields must come first UNSIGNED4 GrpCount := COUNT(GROUP); //value type, column name, and aggregate @@ -906,7 +913,7 @@ T2 := TABLE(D1,R3,F1); - Form1 := RECORD + Form1 := RECORD Person.per_last_name; //field name is per_last_name - size //is as declared in the person dataset STRING25 LocalID := Person.per_first_name; @@ -955,14 +962,14 @@ END; Estruturas de registro embutidas, demonstrando o uso do mesmo nome de campo - ds := DATASET('d', { STRING s; }, THOR); + ds := DATASET('d', { STRING s; }, THOR); t := TABLE(ds, { STRING60 s := ds.s; }); // new "s" field is OK with value type explicitly defined Estruturas RECORD de Dataset Filhos - ChildRec := RECORD + ChildRec := RECORD UNSIGNED4 person_id; STRING20 per_surname; STRING20 per_forename; @@ -979,7 +986,7 @@ END; Um exemplo usando {XPATH('tag')} - R := record + R := record STRING10 fname; STRING12 lname; SET OF STRING1 MySet{XPATH('Set/Element')}; //define set tags @@ -988,7 +995,7 @@ B := DATASET([{'Fred','Bell',['A','B']}, {'George','Blanda',['C','D']}, {'Sam','',['E','F'] } ], R); -OUTPUT(B,,'~RTTEST::test.xml', XML); +OUTPUT(B,,'~RTTEST::test.xml', XML,OVERWRITE); /* this example produces XML output that looks like this: <Dataset> @@ -1004,22 +1011,21 @@ OUTPUT(B,,'~RTTEST::test.xml', XML); Outro exemplo XML com um DATASET filho com 1 campo. - cr := RECORD,MAXLENGTH(1024) + cr := RECORD,MAXLENGTH(1024) STRING phoneEx{XPATH('')}; END; r := RECORD,MAXLENGTH(4096) - STRING id{XPATH('COMP-ID')}; - STRING phone{XPATH('PHONE-NUMBER')}; - DATASET(cr) Fred{XPATH('PHONE-NUMBER-EXP')}; + STRING id{XPATH('COMP-ID')};cr := RECORD,MAXLENGTH(1024) + STRING phoneEx{XPATH('')}; END; DS := DATASET([{'1002','1352,9493',['1352','9493']}, {'1003','4846,4582,0779',['4846','4582','0779']}],r); -OUTPUT(ds,,'~RTTEST::XMLtest2', +OUTPUT(ds,,'~LR::XMLtest2', XML('RECORD', HEADING('<?xml version="1.0" encoding="UTF-8"?><RECORDS>', - '</RECORDS>'))); + '</RECORDS>')),OVERWRITE); /* this example produces XML output that looks like this: <?xml version="1.0" encoding="UTF-8"?> @@ -1042,7 +1048,7 @@ OUTPUT(ds,,'~RTTEST::XMLtest2', XPATH também pode ser usado para definir um arquivo JSON - /* a JSON file called "MyBooks.json" contains this data: + /* a JSON file called "myBooks.json" contains this data: [ { "id" : "978-0641723445", @@ -1064,7 +1070,7 @@ BookRec := RECORD STRING author; //data from author tag, tag name is lowercase and matches field name END; -books := DATASET('~jd::mybooks.json',BookRec,JSON('/')); +books := DATASET('~LR::mybooks.json',BookRec,JSON('/')); OUTPUT(books); Ver também: DATASET, Exemplo: - PtblRec := RECORD + PtblRec := RECORD STRING2 State := Person.per_st; STRING20 City := Person.per_full_city; STRING25 Lname := Person.per_last_name; @@ -498,7 +498,7 @@ Ptbl := DATASET('~Thor400::RTTEMP::TestFile', // directory in which TestFile is located //using ENCRYPT OUTPUT(Tbl,,'~Thor400::RTTEMP::TestFileEncrypted',ENCRYPT('mykey')); -PtblE := DATASET('~Thor400::RTTEMP::TestFileEncrypted', +PtblE := DATASET('~LR::TestFileEncrypted', PtblRec, THOR,OPT,ENCRYPT('mykey')); @@ -722,7 +722,7 @@ PtblE := DATASET('~Thor400::RTTEMP::TestFileEncrypted', Exemplo: - CSVRecord := RECORD + CSVRecord := RECORD UNSIGNED4 person_id; STRING20 per_surname; STRING20 per_forename; @@ -834,7 +834,7 @@ file3 := DATASET('MyFile.CSV', Exemplo: - /* an XML file called "MyFile" contains this XML data: + /* an XML file called "MyFile" contains this XML data: <library> <book isbn="123456789X"> <author>Bayliss</author> @@ -951,7 +951,7 @@ books := DATASET('MyFile',rform,XML('library/book')); Exemplo: - /* a JSON file called "MyBooks.json" contains this data: + /* a JSON file called "MyBooks.json" contains this data: [ { "id" : "978-0641723445", @@ -973,7 +973,7 @@ BookRec := RECORD STRING author; //data from author tag -- tag name is lowercase and matches field name END; -books := DATASET('~jd::mybooks.json',BookRec,JSON('/')); +books := DATASET('~LR::mybooks.json',BookRec,JSON('/')); OUTPUT(books); @@ -1043,14 +1043,14 @@ OUTPUT(books); Exemplo: - PtblRec := RECORD + PtblRec := RECORD STRING2 State; STRING20 City; STRING25 Lname; STRING15 Fname; END; -Ptbl := DATASET('~Thor50::RTTEMP::TestFile', +Ptbl := DATASET('~LR::RTTEMP::TestFile', PtblRec, PIPE('ProcessFile')); // ProcessFile is the input pipe @@ -1076,7 +1076,7 @@ Ptbl := DATASET('~Thor50::RTTEMP::TestFile', Exemplo: - //Named Output DATASET in the same workunit: + //Named Output DATASET in the same workunit: a := OUTPUT(Person(per_st='FL') ,NAMED('FloridaFolk')); x := DATASET(WORKUNIT('FloridaFolk'), RECORDOF(Person)); @@ -1129,7 +1129,7 @@ OUTPUT(ds); Exemplo: - //Inline DATASET using definition values + //Inline DATASET using definition values myrec := {REAL diff, INTEGER1 reason}; rms5008 := 10.0; rms5009 := 11.0; @@ -1219,7 +1219,7 @@ DATASET(s,{STRING txt}); Exemplo: - //the following examples demonstrate 4 ways to do the same thing: + //the following examples demonstrate 4 ways to do the same thing: personRecord := RECORD STRING20 surname; STRING10 forename; @@ -1231,7 +1231,7 @@ namesRecord := RECORD personRecord; END; -namesTable := DATASET('RTTEST::TestRow',namesRecord,THOR); +namesTable := DATASET('~LR::TestRow',namesRecord,THOR); //simple dataset file declaration form addressRecord := RECORD @@ -1343,7 +1343,7 @@ OUTPUT(p3); 3) Vários agregados podem ser calculados de uma vez só usando - summary := TABLE(x.children,{ f1 := COUNT(GROUP), + summary := TABLE(x.children,{ f1 := COUNT(GROUP), f2 := SUM(GROUP,x), f3 := MAX(GROUP,y)}); summary.f1; @@ -1366,17 +1366,17 @@ OUTPUT(p3); Observe que, - TABLE(ds, { ds.id, ds.children(age != 10) }); + TABLE(ds, { ds.id, ds.children(age != 10) }); não é suportado porque um dataset em uma definição de registro significa “expandir todos os campos do dataset no resultado.” Porém, a adição de um identificador cria uma forma que é suportada: - TABLE(ds, { ds.id, newChildren := ds.children(age != 10); }); + TABLE(ds, { ds.id, newChildren := ds.children(age != 10); }); Exemplo: - ParentRec := {INTEGER1 NameID, STRING20 Name}; + ParentRec := {INTEGER1 NameID, STRING20 Name}; ParentTable := DATASET([{1,'Kevin'},{2,'Liz'}, {3,'Mr Nobody'},{4,'Anywhere'}], ParentRec); ChildRec := {INTEGER1 NameID, STRING20 Addr}; @@ -1467,7 +1467,7 @@ r := ROLLUP(fatIn, id, makeChildren(LEFT, RIGHT)); Exemplo: - MyRec := {STRING1 Letter}; + MyRec := {STRING1 Letter}; SomeFile := DATASET([{'A'},{'B'},{'C'},{'D'},{'E'}],MyRec); //Passing a DATASET parameter @@ -1573,7 +1573,7 @@ OUTPUT(b_Name); Exemplo: - rec := {STRING color,UNSIGNED1 code, STRING name}; + rec := {STRING color,UNSIGNED1 code, STRING name}; ColorCodes := DATASET([{'Black' ,0 , 'Fred'}, {'Brown' ,1 , 'Sam'}, {'Red' ,2 , 'Sue'}, @@ -1609,7 +1609,7 @@ OUTPUT(ds); Exemplo: - IMPORT STD; + IMPORT STD; msg(UNSIGNED c) := 'Rec ' + (STRING)c + ' on node ' + (STRING)(STD.system.Thorlib.Node()+1); // DISTRIBUTED example @@ -1617,7 +1617,7 @@ DS := DATASET(CLUSTERSIZE * 2, TRANSFORM({STRING line}, SELF.line := msg(COUNTER)), DISTRIBUTED); -DS; +OUTPUT(DS); /* creates a result like this: Rec 1 on node 1 Rec 2 on node 1 @@ -1633,7 +1633,7 @@ DS2 := DATASET(2, TRANSFORM({STRING line}, SELF.line := msg(COUNTER)), LOCAL); -DS2; +OUTPUT(DS2); /* An alternative (and clearer) way creates a result like this: @@ -1645,8 +1645,7 @@ creates a result like this: Rec 2 on node 3 */ - Ver também: Estrutura - RECORD, Estrutura - TRANSFORM + See Also: RECORD Structure, + TRANSFORM Structure diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DICTIONARY.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DICTIONARY.xml index 9e0ae7d436e..a3f02d13f92 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DICTIONARY.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DICTIONARY.xml @@ -81,7 +81,7 @@ Exemplo: - ColorCodes := DATASET([{'Black' ,0 }, + ColorCodes := DATASET([{'Black' ,0 }, {'Brown' ,1 }, {'Red' ,2 }, {'Orange',3 }, diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ImplicitDatasetRel.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ImplicitDatasetRel.xml index b4fe0e5e5ff..927734a68c0 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ImplicitDatasetRel.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ImplicitDatasetRel.xml @@ -24,7 +24,7 @@ Vamos supor que você tem a seguinte estrutura relacional no banco de dados: - Household Parent + Household Parent Person Child of Household Accounts Child of Person, Grandchild of Household @@ -51,7 +51,7 @@ dataset pai, será avaliado no escopo que abrange o dataset. Por exemplo, a expressão: - Household(Person(personage > AVE(Person,personage)) + Household(Person(personage > AVE(Person,personage)) significa "residências que contêm pessoas com idade acima da idade média da residência". Isso não @@ -65,13 +65,13 @@ independentemente de outros datasets. Isso pode levar a alguns comportamentos um pouco estranhos: - AveAge := AVE(Person,personage); + AveAge := AVE(Person,personage); MyHouses := Household(Person(personage > aveAge)); significa "residências que contêm pessoas com idade acima da idade média da residência". No entanto, - AveAge := AVE(Person,personage) : STORED('AveAge'); + AveAge := AVE(Person,personage) : STORED('AveAge'); MyHouses := Household(Person(personage > aveAge)); Significa "residências que contêm pessoas com idade acima da idade diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-Index.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-Index.xml index e4851f52673..19a51976a9a 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-Index.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-Index.xml @@ -73,34 +73,43 @@ keys - A estrutura RECORD dos campos no - indexfile que contém informações-chave e de - posição do arquivo a serem mencionadas no - baserecset. Os nomes e tipos de campos devem - corresponder aos campos de baserecset (os tipos - de campos REAL e DECIMAL não são permitidos). Isso também pode - conter campos adicionais que não estão presentes no - baserecset (campos calculados). Se omitido, - todos os campos em baserecset serão - usados. + Estrutura RECORD de campos-chave que fazem referência ao + baserecset (os "termos de pesquisa" para o + INDEX). Os campos-chave podem ser campos + baserecset ou campos computados. Os tipos REAL + e DECIMAL não são suportados como campos de "termo de pesquisa". Se + omitido, todos os campos do baserecset serão + usados. Essa estrutura RECORD normalmente é definida in-line dentro + do INDEX usando chaves ({}), mas também pode ser uma estrutura + RECORD definida separadamente. Se a estrutura RECORD for definida + separadamente, ela deverá atender aos mesmos requisitos usados pela + função TABLE() (a estrutura RECORD deve definir o tipo, nome e fonte + dos dados para cada campo), caso contrário, a ação BUILD não + verificará a sintaxe. payload - A estrutura RECORD do indexfile que - contém campos adicionais não usados como chaves. O nome do atributo. - baserecset se o nome do baserecset estiver na - estrutura, especificará "todos os outros campos ainda não nomeados - no parâmetro keys ". Isso pode conter campos - que não estão presentes no baserecset (campos - calculados). A payload esses campos não ocupam - espaço nos nós non-leaf do índice e não podem ser citados em uma - cláusula de filtro KEYED() Todos os campos com o modificador {BLOB} - (para permitir mais de 32 K de dados por entrada de índice) são - armazenados no indexfile, mas não com o resto - do registro. O acesso aos dados do BLOB exige uma procura - adicional. + A estrutura RECORD do indexfile que que + contém campos adicionais não usados como chaves de "termo de + pesquisa". Isso pode conter campos do + baserecordset e/ou campos computados. Se o nome + do baserecset estiver nesta estrutura, ele + especifica que "todos os outros campos ainda não nomeados no + parâmetro de chaves" serão adicionados. Os campos de carga útil não + ocupam espaço nos nós não-folha do índice e não podem ser + referenciados em uma cláusula de filtro KEYED(). Qualquer campo com + o modificador {BLOB} (para permitir mais de 32K de dados por entrada + de índice) é armazenado no arquivo de índice, + mas não com o restante do registro; acessar os dados BLOB requer uma + busca adicional. Essa estrutura RECORD normalmente é definida + in-line dentro do INDEX usando chaves ({}), mas também pode ser uma + estrutura RECORD definida separadamente. Se a estrutura RECORD for + definida separadamente, ela deverá atender aos mesmos requisitos + usados pela função TABLE() (a estrutura RECORD deve definir o tipo, + nome e fonte dos dados para cada campo), caso contrário, a ação + BUILD não verificará a sintaxe. @@ -316,8 +325,19 @@ Bld := BUILDINDEX(AlphaInStateCity); {STRING2 st,STRING20 city,STRING20 lname, UNSIGNED8 fpos{VIRTUAL(fileposition)}},FLAT); -VehicleKey := INDEX(Vehicles,{st,city},{lname,fpos},'vkey::st.city'); -BUILDINDEX(VehicleKey); +VehicleKey1 := INDEX(Vehicles,{st,city},{lname,fpos},'vkey::st.city1'); +BUILD(VehicleKey1); + +SearchTerms := RECORD + Vehicles.st; + Vehicles.city; +END; +Payload := RECORD + Vehicles.lname; +END; +VehicleKey2 := INDEX(Vehicles,SearchTerms,Payload,'vkey::st.city2'); +BUILD(VehicleKey2); + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ScopeNLogicalFilenames.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ScopeNLogicalFilenames.xml index 00f063bd70a..e5f01af859e 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ScopeNLogicalFilenames.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-ScopeNLogicalFilenames.xml @@ -47,7 +47,7 @@ OUTPUT(SomeFile,,'~Training::SomeDir::SomeFileOut2'); DATASET declaration s para esses arquivos pode ser parecida com: - RecStruct := {STRING line}; + RecStruct := {STRING line}; ds1 := DATASET('SomeDir::SomeFileOut1',RecStruct,THOR); ds2 := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR); @@ -62,7 +62,7 @@ ds2 := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR); - FileX := DATASET('~Training::SomeDir::SomeFileOut1',RecStruct,THOR); + FileX := DATASET('~Training::SomeDir::SomeFileOut1',RecStruct,THOR); FileY := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR); Note a presença do nome do escopo nas duas definições. Isso é @@ -100,7 +100,7 @@ FileY := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR);Por exemplo, - MyFile :=DATASET('~foreign::10.150.50.11::training::thor::myfile', + MyFile :=DATASET('~foreign::10.150.50.11::training::thor::myfile', RecStruct,FLAT); concede acesso somente leitura ao arquivo remoto @@ -126,7 +126,7 @@ FileY := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR);Por exemplo, - MyFile :=DATASET('~file::10.150.50.12::c$::training::import::myfile',RecStruct,FLAT); + MyFile :=DATASET('~file::10.150.50.12::c$::training::import::myfile',RecStruct,FLAT); concede acesso ao arquivo remoto c$/AdvancedECL/myfile na zona de entrada de arquivos @@ -140,7 +140,7 @@ FileY := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR); - MyFile :=DATASET('~file::10.150.50.12::c$::^Advanced^E^C^L::myfile',RecStruct,FLAT); + MyFile :=DATASET('~file::10.150.50.12::c$::^Advanced^E^C^L::myfile',RecStruct,FLAT); concede acesso ao arquivo remoto c$/AdvancedECL/myfile na zona de entrada de arquivos @@ -162,7 +162,7 @@ FileY := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR);Por exemplo, - MyFile :=DATASET(DYNAMIC('~training::import::myfile'),RecStruct,FLAT); + MyFile :=DATASET(DYNAMIC('~training::import::myfile'),RecStruct,FLAT); Isso faz com que o arquivo seja resolvido na execução da query e não na implementação. @@ -198,7 +198,7 @@ FileY := DATASET('~Training::SomeDir::SomeFileOut2',RecStruct,THOR);Por exemplo, supondo que o nome de escopo padrão é "thor", os exemplos a seguir definem o mesmo Super Arquivo: - MyFile :=DATASET('{in::file1, + MyFile :=DATASET('{in::file1, in::file2, ~train::in::file3}'), RecStruct,THOR); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ALL.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ALL.xml index db6dfe03a64..4a0cf87aef9 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ALL.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ALL.xml @@ -17,7 +17,7 @@ Exemplo: - MyFunc(STRING1 val, SET OF STRING1 S=ALL) := val IN S; + MyFunc(STRING1 val, SET OF STRING1 S=ALL) := val IN S; //check for presence in passed set, if passed SET OF INTEGER4 MySet := IF(SomeCondition=TRUE, diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXCEPT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXCEPT.xml index 9d6952db0b8..7cd13ab1f69 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXCEPT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXCEPT.xml @@ -21,7 +21,7 @@ Exemplo: - x := DATASET([{'Taylor','Richard','Jackson' ,'M'}, + x := DATASET([{'Taylor','Richard','Jackson' ,'M'}, {'Taylor','David' ,'Boca' ,'M'}, {'Taylor','Rita' ,'Boca' ,'F'}, {'Smith' ,'Richard','Mansfield','M'}, diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXPORT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXPORT.xml index 56ec6a5f346..b03c7de672b 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXPORT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-EXPORT.xml @@ -57,7 +57,7 @@ Exemplo: - EXPORT MyDefinition := 5; + EXPORT MyDefinition := 5; // allows other definitions to use MyModule.MyDefinition if they import MyModule // the filename must be MyDefinition.ecl diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-GROUP.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-GROUP.xml index 25cadd929f7..0769c3b2777 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-GROUP.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-GROUP.xml @@ -25,10 +25,10 @@ Exemplo: - A := TABLE(Person,{per_st,per_sex,COUNT(GROUP)},per_st,per_sex); + A := TABLE(Person,{per_st,per_sex,COUNT(GROUP)},per_st,per_sex); // create a crosstab report of each sex in each state - Ver também: TABLE, See Also: TABLE, COUNT, AVE, MAX, MIN, SUM, VARIANCE, Exemplos: - IMPORT $; //makes all definitions from the same folder available + IMPORT $; //makes all definitions from the same folder available IMPORT $, Std; //makes the standard library functions available, also diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-KEYED-WILD.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-KEYED-WILD.xml index 47356f05f1a..c852ece7ee3 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-KEYED-WILD.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-KEYED-WILD.xml @@ -69,7 +69,7 @@ segmonitor pode ser wild se a expressão nunca puder ser falsa, tal como: - KEYED(inputval = '' OR field = inputval) + KEYED(inputval = '' OR field = inputval) 2. WILD gera um segmonitor wild, a menos que também exista um filtro KEYED() no mesmo campo. @@ -93,7 +93,7 @@ Exemplo: - ds := DATASET('~local::rkc::person', + ds := DATASET('~LR::person', { STRING15 f1, STRING15 f2, STRING15 f3, STRING15 f4, UNSIGNED8 filepos{VIRTUAL(fileposition)} }, FLAT); ix := INDEX(ds, { ds },'\\lexis\\person.name_first.key'); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LEFT-RIGHT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LEFT-RIGHT.xml index b44ecd55d9f..3b67edf24bf 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LEFT-RIGHT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LEFT-RIGHT.xml @@ -21,7 +21,7 @@ Exemplo: - dup_flags := JOIN(person,person, + dup_flags := JOIN(person,person, LEFT.current_address_key=RIGHT.current_address_key AND fuzzy_equal,req_output(LEFT,RIGHT)); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LIKELY.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LIKELY.xml index ed536559635..0499b24e266 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LIKELY.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-LIKELY.xml @@ -70,7 +70,7 @@ Exemplo: - PeopleYoungerThan100 := AllPeople( LIKELY(age < 100, 0.999) ); + PeopleYoungerThan100 := AllPeople( LIKELY(age < 100, 0.999) ); // Probably not worth spilling PeopleYoungerThan100 PeopleOlderThan100 := AllPeople( UNLIKELY(age>100) ); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ROWS--LEFT-RIGHT.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ROWS--LEFT-RIGHT.xml index 4979fbb69e2..793583a21a0 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ROWS--LEFT-RIGHT.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-ROWS--LEFT-RIGHT.xml @@ -20,7 +20,7 @@ Exemplo: - NormRec := RECORD + NormRec := RECORD STRING20 thename; STRING20 addr; END; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SELF.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SELF.xml index 87b838e4765..2d8baf78a93 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SELF.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SELF.xml @@ -23,7 +23,7 @@ Exemplo: - Ages := RECORD + Ages := RECORD INTEGER8 Age; //a field named "Age" END; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SHARED.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SHARED.xml index d143a7bbff7..d8a423b8fd6 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SHARED.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SHARED.xml @@ -57,7 +57,7 @@ Exemplo: - //this code is contained in the GoodHouses.ecl file + //this code is contained in the GoodHouses.ecl file BadPeople := Person(EXISTS(trades(EXISTS(phr(phr_rate > '4')))); //local only to the GoodHouses definition SHARED GoodHouses := Household(~EXISTS(BadPeople)); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SKIP.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SKIP.xml index f212d9abe00..c0ae4305060 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SKIP.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-SKIP.xml @@ -20,7 +20,7 @@ Exemplo: - SequencedAges := RECORD + SequencedAges := RECORD Ages; INTEGER8 Sequence := 0; END; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-TrueFalse.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-TrueFalse.xml index d3218b83ab6..8d9df1b6e1d 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-TrueFalse.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/ResrvdKywds-TrueFalse.xml @@ -20,8 +20,12 @@ Exemplo: - BooleanTrue := TRUE; -Booleanfalse := FALSE; + BooleanTrue := TRUE; +Booleanfalse := FALSE; + +OUTPUT(BooleanTrue); +OUTPUT(BooleanFalse) + Ver também: BOOLEAN diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-BeginC++.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-BeginC++.xml index 1b0c4da5ed7..df352fd0108 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-BeginC++.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-BeginC++.xml @@ -70,7 +70,7 @@ incorporar código C++ e especificar opções adicionais (por exemplo, DISTRIBUTED): - myFunction(string name) := EMBED(C++ [: options]) + myFunction(string name) := EMBED(C++ [: options]) ... text ENDEMBED @@ -84,7 +84,7 @@ ENDEMBED Os tipos são passados da seguinte forma: - //The following typedefs are used below: + //The following typedefs are used below: typedef unsigned size32_t; typedef wchar_t UChar; [ unsigned short in linux ] @@ -92,7 +92,7 @@ typedef wchar_t UChar; [ unsigned short in linux ] incorporado, os parâmetros são sempre convertidos em minúsculas, com maiúsculas nas conjunções (veja abaixo). - ECL C++ [Linux in brackets] + ECL C++ [Linux in brackets] BOOOLEAN xyz bool xyz INTEGER1 xyz signed char xyz INTEGER2 xyz int16_t xyz @@ -122,14 +122,14 @@ SET OF ... xyz bool isAllXyz, size32_t lenXyz, void * xyz - STRING ABC -> size32_t lenAbc, const char * abc; + STRING ABC -> size32_t lenAbc, const char * abc; UNICODE ABC -> size32_t lenABC, const UChar * abc; Um dataset é passado como um par tamanho/pointer. O comprimento determina o tamanho do seguinte dataset em bytes. A mesma convenção de nomenclatura é usada: - DATASET(r) ABC -> size32_t lenAbc, const void * abc + DATASET(r) ABC -> size32_t lenAbc, const void * abc The rows are accessed as x+0, x + length(row1), x + length(row1) + length(row2) LINKCOUNTED DATASET(r) ABC -> size32_t countAbc, const byte * * abc @@ -143,13 +143,13 @@ LINKCOUNTED DATASET(r) ABC -> size32_t countAbc, const byte * * abc Os conjuntos são passados como um conjunto de parâmetros (all, size, pointer): - SET OF UNSIGNED4 ABC -> bool isAllAbc, size32_t lenAbc, const void * abc + SET OF UNSIGNED4 ABC -> bool isAllAbc, size32_t lenAbc, const void * abc Os tipos de retorno são processados como funções C++ retornando os mesmos tipos, com algumas exceções. As exceções têm alguns parâmetros iniciais adicionais onde os resultados serão retornados: - ECL C++ [Linux in brackets] + ECL C++ [Linux in brackets] DATA xyz size32_t & __lenResult, void * & __result STRING xyz size32_t & __lenResult, char * & __result CONST STRING xyz size32_t lenXyz, const char * xyz @@ -173,11 +173,11 @@ STREAMED DATASET(r) Por exemplo, - STRING process(STRING value, INTEGER4 len) + STRING process(STRING value, INTEGER4 len) tem o protótipo: - void process(size32_t & __lenResult, char * & __result, + void process(size32_t & __lenResult, char * & __result, size32_t lenValue, char * value, int len); Uma função que recebe parâmetros de string também deve ter o tipo @@ -185,7 +185,7 @@ STREAMED DATASET(r) que compiladores modernos não relatem erros quando strings constantes são passadas à função. - BOOLEAN isUpper(const string mystring) := BEGINC++ + BOOLEAN isUpper(const string mystring) := BEGINC++ size_t i=0; while (i < lenMystring) { @@ -198,6 +198,116 @@ ENDC++; isUpper('JIM'); + + Os parâmetros também podem incluir datasets transmitidos. + + Se stream for especificado no conjunto de dados, o parâmetro será + passado como IRowStream. A próxima linha do dataset é obtida + chamando: + + dataset->nextRow(); + + Depois de processada, a linha deve ser liberada chamando + + rtlReleaseRow(next); + + Por exemplo: + + traceDataset(STREAMED DATASET(r) ds, BOOLEAN isLocal = FALSE) := EMBED(C++) +#include <stdio.h> +#body + for(;;) + { + const byte * next = (const byte *)ds->nextRow(); + if (!next) + return; + unsigned __int64 id = *(__uint64 *)(next); + size32_t lenName = *(size32_t *)(next + sizeof(__uint64)); + const char * name = (char *)(next + sizeof(__uint64) + sizeof(size32_t)); + printf("id(%u) name(%.*s)\n", (unsigned)id, lenName, name); + rtlReleaseRow(next); + } +ENDEMBED; + + Se o resultado de uma função c++ for um dataset transmitido, ele + precisará retornar uma instância de uma interface IRowStream. A função + também receberá um parâmetro implícito extra: + + IEngineRowAllocator * _resultAllocator + + que é usado para alocar as linhas retornadas da função. + + Por exemplo: + + // This function takes two streamed inputs and outputs the result of two values +// from the left multiplied together and added to a row from the right. + +STREAMED DATASET(r) myDataset(STREAMED DATASET(r) ds1, STREAMED DATASET(r) ds2) + := EMBED(C++ : activity) +#include <stdio.h> +#body + class MyStreamInlineDataset : public RtlCInterface, implements IRowStream + { + public: + + MyStreamInlineDataset(IEngineRowAllocator * _resultAllocator, IRowStream * _ds1, + IRowStream * _ds2) + : resultAllocator(_resultAllocator), ds1(_ds1), ds2(_ds2) + { + } + RTLIMPLEMENT_IINTERFACE virtual const void *nextRow() override + { + const byte * next1a = (const byte *)ds1->nextRow(); + if (!next1a) + return nullptr; + const byte * next1b = (const byte *)ds1->nextRow(); + const byte * next2 = (const byte *)ds2->nextRow(); + if (!next1b || !next2) + rtlFailUnexpected(); + unsigned __int64 value1a = *(const unsigned __int64 *)next1a; + unsigned __int64 value1b = *(const unsigned __int64 *)next1b; + unsigned __int64 value2 = *(const unsigned __int64 *)next2; + rtlReleaseRow(next1a); + rtlReleaseRow(next1b); + rtlReleaseRow(next2); + + unsigned __int64 result = value1a * value1b + value2; + RtlDynamicRowBuilder rowBuilder(resultAllocator); + byte * row = rowBuilder.getSelf(); + *(__uint64 *)(row) = result; + return rowBuilder.finalizeRowClear(sizeof(unsigned __int64)); + } + virtual void stop() override + { + ds1->stop(); + ds2->stop(); + } + protected: + Linked<IEngineRowAllocator> resultAllocator; + IRowStream * ds1; + IRowStream * ds2; + }; return new MyStreamInlineDataset(_resultAllocator, ds1, ds2); +ENDEMBED; + + + Nota: Se a linha resultante não tiver um tamanho fixo, você deverá + chamar: + + byte * row = rowBuilder.ensureCapacity(<totalSize>, nullptr); + + ao invés de: + + byte * row = rowBuilder.getSelf(); + + Este código usa um RtlDynamicRowBuilder que é uma classe usada pelo + gerador de código. Em vez de usar a classe RtlDynamicRowBuilder, você pode + chamar diretamente resultAllocator->createRow(). + + Quando um tipo de dados é incluído em uma linha de entrada, em vez + de ser passado como parâmetro, o formato é o mesmo dos parâmetros, exceto + que, em vez de ter um ponteiro para a string, etc., a string segue o + comprimento de 4 bytes. Os dados na linha não estão alinhados; isto é, tem + embalagem de 1. @@ -252,7 +362,7 @@ isUpper('JIM'); Exemplo: - //static int add(int x,int y) { + //static int add(int x,int y) { INTEGER4 add(INTEGER4 x, INTEGER4 y) := BEGINC++ #option pure return x + y; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-EMBED.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-EMBED.xml index a982c1e1b8c..25b37b282ce 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-EMBED.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-EMBED.xml @@ -101,7 +101,7 @@ incorporar código C++ e especificar opções adicionais (por exemplo, DISTRIBUTED): - myFunction(string name) := EMBED(C++ [: options]) + myFunction(string name) := EMBED(C++ [: options]) ... text ENDEMBED @@ -112,8 +112,8 @@ ENDEMBED Exemplo: - //First form: a structure -IMPORT Python; //make Python language available + //First form: a structure +IMPORT Python3 AS Python; //make Python language available INTEGER addone(INTEGER p) := EMBED(Python) # Python code that returns one more than the value passed to it diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-FuncTion.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-FuncTion.xml index 8f3a864833f..96c754cf409 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-FuncTion.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-FuncTion.xml @@ -16,7 +16,7 @@ code - RETURN + RETURN retval; END; @@ -90,67 +90,24 @@ Exemplo: - EXPORT doProjectChild(parentRecord l,UNSIGNED idAdjust2) := FUNCTION - newChildRecord copyChild(childRecord l) := TRANSFORM - SELF.person_id := l.person_id + idAdjust2; - SELF := l; - END; - - RETURN PROJECT(CHOOSEN(l.children, numChildren),copyChild(LEFT)); -END; - //And called from -SELF.children := doProjectChild(l, 99); - -//********************************** -EXPORT isAnyRateGE(STRING1 rate) := FUNCTION - SetValidRates := ['0','1','2','3','4','5','6','7','8','9']; - IsValidTradeRate := ValidDate(Trades.trd_drpt) AND - Trades.trd_rate >= rate AND - Trades.trd_rate IN SetValidRates; - ValidPHR := Prev_rate(phr_grid_flag = TRUE, - phr_rate IN SetValidRates, - ValidDate(phr_date)); - IsPHRGridRate := EXISTS(ValidPHR(phr_rate >= rate, - AgeOf(phr_date)<=24)); - IsMaxPHRRate := MAX(ValidPHR(AgeOf(phr_date) > 24), - Prev_rate.phr_rate) >= rate; - RETURN IsValidTradeRate OR IsPHRGridRate OR IsMaxPHRRate; -END; - -//************************************************************* -//a FUNCTION with side-effect Action -namesTable := FUNCTION - namesRecord := RECORD - STRING20 surname; - STRING10 forename; - INTEGER2 age := 25; - END; - o := OUTPUT('namesTable used by user <x>'); - ds := DATASET([{'x','y',22}],namesRecord); - RETURN WHEN(ds,O); -END; -z := namesTable : PERSIST('z'); - //the PERSIST causes the side-effect action to execute only when the PERSIST is re-built - -OUTPUT(z); - -//************************************************************* -//a coordinated set of 3 examples - + //a coordinated set of 3 examples +IMPORT Std; NameRec := RECORD - STRING5 title; - STRING20 fname; - STRING20 mname; - STRING20 lname; - STRING5 name_suffix; - STRING3 name_score; + STRING5 title := ''; + STRING20 fname := ''; + STRING20 mname := ''; + STRING20 lname := ''; + STRING5 name_suffix := ''; + STRING3 name_score := ''; END; MyRecord := RECORD UNSIGNED id; STRING uncleanedName; NameRec Name; END; -ds := DATASET('RTTEST::RowFunctionData', MyRecord, THOR); +ds := DATASET([{1,'Mr. John Smith JR'}, + {2,'Mrs. Susie Samantha Jones 3'}, + {3,'Dr. Fred Taylor SR'}],MyRecord); STRING73 CleanPerson73(STRING inputName) := FUNCTION suffix :=[ ' 0',' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9', ' J',' JR',' S',' SR']; @@ -178,7 +135,7 @@ END; //Example 1 - a transform to create a row from an uncleaned name NameRec createRow(string inputName) := TRANSFORM - cleanedText := LocalAddrCleanLib.CleanPerson73(inputName); + cleanedText := CleanPerson73(inputName); SELF.title := cleanedText[1..5]; SELF.fname := cleanedText[6..25]; SELF.mname := cleanedText[26..45]; @@ -207,7 +164,7 @@ OUTPUT(y2); NameRec cleanedName2(STRING inputName) := FUNCTION NameRec createRow := TRANSFORM - cleanedText := LocalAddrCleanLib.CleanPerson73(inputName); + cleanedText := CleanPerson73(inputName); SELF.title := cleanedText[1..5]; SELF.fname := cleanedText[6..25]; SELF.mname := cleanedText[26..45]; @@ -237,9 +194,26 @@ OperateOnNumbers(Number1, Number2) := FUNCTION RETURN result; END; -OperateOnNumbers(23,22).Multiplied; -OperateOnNumbers(23,22).Differenced; -OperateOnNumbers(23,22).Summed; +OUTPUT(OperateOnNumbers(23,22).Multiplied); //506 +OUTPUT(OperateOnNumbers(23,22).Differenced); //1 +OUTPUT(OperateOnNumbers(23,22).Summed); //45 + +//************************************************************* +//a FUNCTION with side-effect Action +namesTable := FUNCTION + namesRecord := RECORD + STRING20 surname; + STRING10 forename; + INTEGER2 age := 25; + END; + o := OUTPUT('namesTable used by user <x>'); + ds1 := DATASET([{'x','y',22}],namesRecord); + RETURN WHEN(ds1,o); +END; +z := namesTable : PERSIST('z'); + //the PERSIST causes the side-effect action to execute only when the PERSIST is re-built +OUTPUT(z); + Ver também: Estrutura MODULE, Estrutura TRANSFORM, - EXPORT Field_Population(infile,infield,compareval) := FUNCTIONMACRO + EXPORT Field_Population(infile,infield,compareval) := FUNCTIONMACRO c1 := COUNT(infile(infield=compareval)); c2 := COUNT(infile); RETURN DATASET([{'Total Records',c2}, @@ -123,7 +123,7 @@ OUTPUT(Field_Population(ds2,Gender,'')); conflitos de nome com definições externas dentro do mesmo escopo de visibilidade de FUNCTIONMACRO: - numPlus := 'this creates a syntax error without LOCAL in the FUNCTIONMACRO'; + numPlus := 'this creates a syntax error without LOCAL in the FUNCTIONMACRO'; AddOne(num) := FUNCTIONMACRO LOCAL numPlus := num + 1; //LOCAL required here RETURN numPlus; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Interface.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Interface.xml index c71eaf7b89d..a8c923f8eac 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Interface.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Interface.xml @@ -86,7 +86,7 @@ Exemplo: - HeaderRec := RECORD + HeaderRec := RECORD UNSIGNED4 RecID; STRING20 company; STRING25 address; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Macro.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Macro.xml index 200bab6e3a2..34b4f26d9ff 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Macro.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Macro.xml @@ -90,7 +90,7 @@ Exemplo: - // This is a DATASET Value macro that results in a crosstab + // This is a DATASET Value macro that results in a crosstab DATASET CrossTab(File,X,Y) := MACRO TABLE(File,{X, Y, COUNT(GROUP)},X,Y) ENDMACRO; diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Module.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Module.xml index 40b872d4700..987bf28a71f 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Module.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Module.xml @@ -155,9 +155,10 @@ MyModuleStructure MODULE esteja contida em um Módulo de repositório do ECL denominado MyModule, e que ele contém um membro de EXPORT denominado MyDefinition, você referenciaria essa - definição como: + definition as + MyModule.MyModuleStructure.MyDefinition: - MyModule.MyModuleStructure.MyDefinition + MyMod := MODULE MyMod := MODULE SHARED x := 88; @@ -168,8 +169,8 @@ MyMod := MODULE END; END; -MyMod.InMod.Val1; -MyMod.InMod.Val2; +OUTPUT(MyMod.InMod.Val1); +OUTPUT(MyMod.InMod.Val2); @@ -294,28 +295,37 @@ IF (doIt, OUTPUT(customerNames.File)); Exemplo: - EXPORT filterDataset(STRING search, BOOLEAN onlyOldies) := MODULE + namesRecord := RECORD + STRING20 surname; + STRING10 forename; + INTEGER2 age := 25; +END; +namesTable := DATASET([{'Smith','Sue',72}, + {'Jones','Joe',32}, + {'Jones','Fred',82}],namesRecord); + +filterDataset1(STRING search, BOOLEAN onlyOldies) := MODULE f := namesTable; //local to the "g" definition SHARED g := IF (onlyOldies, f(age >= 65), f); //SHARED = visible only within the structure - EXPORT included := g(surname != search); - EXPORT excluded := g(surname = search); + EXPORT included := g(surname = search); + EXPORT excluded := g(surname <> search); //EXPORT = visible outside the structure END; -filtered := filterDataset('Halliday', TRUE); -OUTPUT(filtered.included,,NAMED('Included')); -OUTPUT(filtered.excluded,,NAMED('Excluded')); - +filtered1 := filterDataset1('Smith', TRUE); +OUTPUT(filtered1.included,,NAMED('Included1')); +OUTPUT(filtered1.excluded,,NAMED('Excluded1')); + //same result, different coding style: -EXPORT filterDataset(BOOLEAN onlyOldies) := MODULE +filterDataset2(BOOLEAN onlyOldies) := MODULE f := namesTable; SHARED g := IF (onlyOldies, f(age >= 65), f); - EXPORT included(STRING search) := g(surname <> search); - EXPORT excluded(STRING search) := g(surname = search); + EXPORT included(STRING search) := g(surname = search); + EXPORT excluded(STRING search) := g(surname <> search); END; -filtered := filterDataset(TRUE); -OUTPUT(filtered.included('Halliday'),,NAMED('Included')); -OUTPUT(filterDataset(true).excluded('Halliday'),,NAMED('Excluded')); +filtered2 := filterDataset2(TRUE); +OUTPUT(filtered2.included('Smith'),,NAMED('Included2')); +OUTPUT(filterDataset2(true).excluded('Smith'),,NAMED('Excluded2')); //VIRTUAL examples @@ -336,12 +346,12 @@ OUTPUT(Mod2.func(5)); //result is 15 OUTPUT(Mod3.func(5)); //result is 6 //FORWARD example -EXPORT MyModule := MODULE, FORWARD - EXPORT INTEGER foo := bar; +MyModule := MODULE, FORWARD + EXPORT INTEGER foo := bar; //forward reference EXPORT INTEGER bar := 42; END; -MyModule.foo; +OUTPUT(MyModule.foo); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Transform.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Transform.xml index a0f862e3185..b8df0a3fb35 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Transform.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/SpecStruc-Transform.xml @@ -172,7 +172,7 @@ transformation; , ou pode usar um destes atalhos: - SELF := [ ]; + SELF := [ ]; limpa campos nos resultados de resulttype que não foram definidos previamente na função de transformação, ao passo que @@ -184,7 +184,7 @@ limpa apenas os campos secundários em outfield, e este formato: - SELF := label; //the label names a RECORD structure + SELF := label; //the label names a RECORD structure RECORD structure parameter // in the parameterlist @@ -212,7 +212,7 @@ Exemplo: - Ages := RECORD + Ages := RECORD AgedRecs.id; AgedRecs.id1; AgedRecs.id2; @@ -259,7 +259,7 @@ assignId2(namesRecord l) := assignId(l, 2); Exemplo: - namesIdRecord assignId(namesRecord L) := TRANSFORM + namesIdRecord assignId(namesRecord L) := TRANSFORM SELF := L; //more like-named fields across SELF := []; //clear all other fields END; @@ -279,15 +279,15 @@ projected2 := PROJECT(namesTable, TRANSFORM(namesIdRecord, Este formato de TRANSFORM é uma versão abreviada de TRANSFORMs em linha. Neste formato, - TRANSFORM(LEFT) + TRANSFORM(LEFT) é diretamente equivalente a - TRANSFORM(RECORDOF(LEFT), SELF := LEFT) + TRANSFORM(RECORDOF(LEFT), SELF := LEFT) Exemplo: - namesIdRecord assignId(namesRecord L) := TRANSFORM + namesIdRecord assignId(namesRecord L) := TRANSFORM SELF := L; //move like-named fields across END; projected1 := PROJECT(namesTable, assignId(LEFT)); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-IFDEFINED.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-IFDEFINED.xml new file mode 100644 index 00000000000..a6ca69d6d28 --- /dev/null +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-IFDEFINED.xml @@ -0,0 +1,61 @@ + + + + #IFDEFINED + + #IFDEFINED + #IFDEFINED + ( definition, defaultValue + ) + + + + + + + + + + + Definição + + Nome da definiçao ECL. + + + + defaultValue + + O valor padrão para esse definição não existe. + + + + + + #IFDEFINED determina se a + definição foi ou não definida no ponto em que aparece + no código. Se tiver sido definido, gera a definição. Caso não tenha sido + definido, gera o defaultValue + + Exemplo: + + definitions := MODULE + EXPORT val1 := 'hi'; +END; +root := MODULE + EXPORT val2 := 'defined'; +END; + +val1 := 'me'; +#IFDEFINED(val1, 'val1 undefined'); //me +IF(#IFDEFINED(val1, 'val1 undefined') = 'me','FRED','JOEY'); //FRED +IF(#IFDEFINED(val1, 'val1 undefined') = 'me too','FRED','JOEY'); //JOEY + +#IFDEFINED(val2, 'val2 undefined'); //val2 undefined + +#IFDEFINED(definitions.val1, 'definitions.val1 undefined'); //hi +#IFDEFINED(root.val2, 'root.val2 undefined'); //defined + + + See Also: #ISDEFINED + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-ISDEFINED.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-ISDEFINED.xml new file mode 100644 index 00000000000..e72d303f290 --- /dev/null +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-ISDEFINED.xml @@ -0,0 +1,67 @@ + + + + #ISDEFINED + + #ISDEFINED + #ISDEFINED + ( definition ) + + + + + + + + + + Definição + + O nome de uma definição ECL. + + + + Retorna + + Um valor boleano + + + + + + #ISDEFINED retorna se a + definição foi ou não definida no ponto em que aparece + no código. + + Exemplo: + + getFlagsValue(defname) := MACRO + defname := + #IF (#ISDEFINED(DoAlways)) + 1 + + #ELSEIF (#ISDEFINED(DoNever)) + 2 + + #END + 3; +ENDMACRO; + +#ISDEFINED(DoNever); //false + +getFlagsValue(x1); //neither is defined yet = 3 +OUTPUT(x1); //3 + +DoNever := 'fred'; +getFlagsValue(x2); //only DoNever is defined = 5 +OUTPUT(x2); //5 + +DoAlways := 42; +getFlagsValue(x3); //both are defined = 4 (so the #ELSEIF isn't evaluated) +OUTPUT(x3); //4 + +#ISDEFINED(DoNever); //true + + + Veja também: #IFDEFINED + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-OPTION.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-OPTION.xml index 08943a5ebbc..f5b8956c04e 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-OPTION.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Templ-OPTION.xml @@ -531,6 +531,20 @@ MB. + + validateFileType + + Padrão: True + + Se for falso, os mecanismos usam a definição na workunit + ECL e ignoram o tipo de arquivo dos metadados do arquivo lógico. + Se verdadeiro, esta verificação será sempre ignorada se a ECL + estiver lendo um CSV ou um arquivo simples com largura de + registro fixa. Além disso, quando verdadeiro, se a ECL estiver + lendo XML ou JSON e houver uma incompatibilidade, ela emitirá um + aviso e não um erro. + + compressInternalSpills @@ -657,13 +671,24 @@ Substitui a configuração no ECL Agent para analisar as - workunits               depois que as consultas ECL são - executadas (somente Thor). Isso permite que a workunit seja - analisada para identificar e exibir potenciais -               problemas. Estes possíveis problemas são exibidos - na área do ECL Watch               "Warnings & Errors". A - configuração global é padronizada para               TRUE, mas - pode ser alterado usando o Configuration Manager. + workunits depois que as consultas ECL são executadas (somente + Thor). Isso permite que a workunit seja analisada para + identificar e exibir potenciais problemas. Estes possíveis + problemas são exibidos na área do ECL Watch "Warnings & + Errors". A configuração global é padronizada para TRUE, mas pode + ser alterado usando o Configuration Manager. + + + + maxCost + + Padrão: nenhum + + Substitui a configuração de limite na configuração do + Thor. Se o limite maxCost for atingido, a + guilhotina do job será aplicada e o job será interrompido. Isso + não substitui a configuração do hardlimit. + Isso é válido apenas para jobs Thor. diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Data.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Data.xml index 4f0eb686671..1620211225b 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Data.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Data.xml @@ -28,6 +28,8 @@ Exemplo: - DATA8 MyHexString := x'1234567890ABCDEF'; - // an 8-byte data block - hex values 12 34 56 78 90 AB CD EF + DATA8 MyHexString := x'1234567890ABCDEF'; + // an 8-byte data block - hex values 12 34 56 78 90 AB CD EF +OUTPUT(MyHexString); + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Enum.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Enum.xml index 979e77a2673..887c6850cb7 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Enum.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Enum.xml @@ -53,32 +53,20 @@ Exemplo: - GenderEnum := ENUM(UNSIGNED1,Male,Female,Either,Unknown); + GenderEnum := ENUM(UNSIGNED1,Male,Female,NonBinary,Unknown); //values are 1, 2, 3, 4 - -Pflg := ENUM(None=0,Dead=1,Foreign=2,Terrorist=4,Wanted=Terrorist*2); +personFlag := ENUM(None=0,Dead=1,Foreign=2,Terrorist=4,Wanted=Terrorist*2); //values are 0, 1, 2, 4, 8 namesRecord := RECORD STRING20 surname; STRING10 forename; GenderEnum gender; - INTEGER2 age := 25; + UNSIGNED1 personFlag := 0; END; -namesTable2 := DATASET([{'Foreman','George',GenderEnum.Male,Pflg.Foreign}, - {'Bin','O',GenderEnum.Male,Pflg.Foreign+Pflg.Terrorist+Pflg.Wanted} +namesTable2 := DATASET([{'Boreman','George',GenderEnum.Male,personFlag.Foreign}, + {'Bin','O',GenderEnum.Male,personFlag.Foreign+personFlag.Terrorist+personFlag.Wanted} ], namesRecord); OUTPUT(namesTable2); - -myModule(UNSIGNED4 baseError, STRING x) := MODULE - EXPORT ErrCode := ENUM( ErrorBase = baseError, - ErrNoActiveTable, - ErrNoActiveSystem, - ErrFatal, - ErrLast); - EXPORT reportX := FAIL(ErrCode.ErrNoActiveTable,'No ActiveTable in ' + x); -END; - -myModule(100, 'Call1').reportX; -myModule(300, 'Call2').reportX; + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-QString.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-QString.xml index 3117877ed80..e288639b26a 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-QString.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-QString.xml @@ -17,7 +17,7 @@ conjunto de caracteres é limitado às letras A-Z, aos números 0-9, ao espaço em branco, e ao seguinte conjunto de caracteres especiais: - ! " # $ % & ' ( ) * + , - . / ; < = > ? @ [ \ ] ^ _ + ! " # $ % & ' ( ) * + , - . / ; < = > ? @ [ \ ] ^ _ Se n for omitido, a QSTRING terá comprimento variável para o tamanho necessário para conter o resultado de um parâmetro @@ -28,8 +28,10 @@ Exemplo: - QSTRING12 CompanyName := 'LEXISNEXIS'; - // uses only 9 bytes of storage instead of 12 + QSTRING12 CompanyName := 'LEXISNEXIS'; + // uses only 9 bytes of storage instead of 12 +OUTPUT(CompanyName) + Ver também: STRING, LENGTH, TRIM, Smallest Value - Type Significant Digits Largest ValueType Significant Digits Largest Value Smallest Value REAL4 7 (9999999) 3.402823e+038 1.175494e-038 REAL8 15 (999999999999999) 1.797693e+308 2.225074e-308 diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-String.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-String.xml index 665f1a0dd20..660b48bce38 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-String.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-String.xml @@ -31,14 +31,14 @@ Exemplo: - STRING1 MyString := IF(SomeAttribute > 10,'1','0'); + STRING1 MyString := IF(SomeAttribute > 10,'1','0'); // declares MyString a 1-byte ASCII string EBCDIC STRING3 MyString1 := 'ABC'; //implicit ASCII to EBCDIC conversion - -EBCDIC STRING3 MyString2 := x'616263'; - //NO conversion here +OUTPUT(MyString); +OUTPUT(MyString1); + Ver também: LENGTH, TRIM, TRANSFER ). - MyBoolean := (BOOLEAN) IF(SomeAttribute > 10,1,0); + SomeAttribute :=11; +MyBoolean := (BOOLEAN) IF(SomeAttribute > 10,1,0); // casts the INTEGER values 1 and 0 to a BOOLEAN TRUE or FALSE MyString := (STRING1) IF(SomeAttribute > 10,1,0); // casts the INTEGER values 1 and 0 to a 1-character string @@ -30,7 +31,13 @@ MyString := (STRING1) IF(SomeAttribute > 10,1,0); MyValue := (INTEGER) MAP(MyString = '1' => MyString, '0'); // casts the STRING values '1' and '0' to an INTEGER 1 or 0 MySet := (SET OF INTEGER1) [1,2,3,4,5,6,7,8,9,10]; - //casts from a SET OF INTEGER8 (the default) to SET OF INTEGER1 + //casts from a SET OF INTEGER8 (the default) to SET OF INTEGER1 + +UTPUT(MyBoolean); +OUTPUT(MyString); +OUTPUT(MyValue); +OUTPUT(MySet); + @@ -82,8 +89,11 @@ MySet := (SET OF INTEGER1) [1,2,3,4,5,6,7,8,9,10]; com a adição de colchetes angulares (>valuetype<). - INTEGER1 MyInt := 65; //MyInt is an integer value 65 -STRING1 MyVal := (>STRING1<) MyInt; //MyVal is "A" (ASCII 65) + INTEGER1 MyInt := 65; //MyInt is an integer value 65 +STRING1 MyVal := (>STRING1<) MyInt; //MyVal is "A" (ASCII 65) +OUTPUT(MyInt); +OUTPUT(MyVal); + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-TypeOf.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-TypeOf.xml index 6912406aa54..bbbbf7431a8 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-TypeOf.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-TypeOf.xml @@ -42,8 +42,10 @@ Exemplo: - STRING3 Fred := 'ABC'; //declare Fred as a 3-byte string -TYPEOF(Fred) Sue := Fred; //declare Sue as "just like" Fred + STRING3 Fred := 'ABC'; //declare Fred as a 3-byte string +TYPEOF(Fred) Sue := Fred; //declare Sue as "just like" Fred +OUTPUT(Fred); +OUTPUT(Sue); Ver também: Estrutura TRANSFORM diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-UTF8.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-UTF8.xml index 4b9aa103fd0..def4be9c1b7 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-UTF8.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-UTF8.xml @@ -30,12 +30,14 @@ Exemplo: - UTF8 FirstName := U8'Noël'; // utf-8-encoded string - + UTF8 FirstName := U8'Noël'; // utf-8-encoded string UTF8_de MyUnicodeString := U8'abcd\353'; // becomes 'abcdë' with a German locale - UTF8_4 FirstName4 := U8'Noël'; // 4-character utf-8-encoded string +UTF8_de_5 MyUnicodeString_de5 := U8'abcd\353'; // becomes 'abcdë' with a German locale -UTF8_de_5 MyUnicodeString5 := U8'abcd\353'; // becomes 'abcdë' with a German locale +OUTPUT(FirstName); +OUTPUT(MyUnicodeString); +OUTPUT(FirstName4); +OUTPUT(MyUnicodeString_de5); diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Unicode.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Unicode.xml index 8f6282803f3..affb0552486 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Unicode.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Unicode.xml @@ -30,12 +30,18 @@ Exemplo: - UNICODE16 MyUNIString := U'1234567890ABCDEF'; + UNICODE16 MyUNIString := U'1234567890ABCDEF'; // utf-16-encoded string UNICODE4 MyUnicodeString := U'abcd'; // same as: (UNICODE)'abcd' -UNICODE_de5 MyUnicodeString := U'abcd\353'; +UNICODE_de5 MyUnicodeString_de := U'abcd\353'; // becomes 'abcdë' with a German locale -UNICODE_de5 MyUnicodeString := U'abcdë'; - // same as previous example +UNICODE_de5 MyUnicodeString_de5 := U'abcdë'; + // same as previous example + +OUTPUT(MyUNIString); +OUTPUT(MyUnicodeString); +OUTPUT(MyUnicodeString_de); +OUTPUT(MyUnicodeString_de5); + diff --git a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-VarString.xml b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-VarString.xml index 0b3dcf7cd81..29bfd05b13b 100644 --- a/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-VarString.xml +++ b/docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-VarString.xml @@ -22,8 +22,10 @@ Exemplo: - VARSTRING3 MyString := 'ABC'; - // declares MyString a 3-byte null-terminated string + VARSTRING3 MyString := 'ABC'; + // declares MyString a 3-byte null-terminated string +OUTPUT(MyString); + Ver também: LENGTH, TRIM, O limite de tamanho superior para qualquer valor de VARUNICODE é de 4 GB. - - Exemplo: - - VARUNICODE16 MyUNIString := U'1234567890ABCDEF'; - // utf-16-encoded string -VARUNICODE4 MyUnicodeString := U'abcd'; - // same as: (UNICODE)'abcd' -VARUNICODE5 MyUnicodeString := U'abcd\353'; - // becomes 'abcdë' -VARUNICODE5 MyUnicodeString := U'abcdë'; - // same as previous example diff --git a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/CodeSign.xml b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/CodeSign.xml index f8a2d7887fc..09c0b214914 100644 --- a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/CodeSign.xml +++ b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/CodeSign.xml @@ -1,36 +1,52 @@ - + - <emphasis role="strong">Assinatura do Código, Linguagens Embarcadas e Segurança</emphasis> + <emphasis role="strong">Assinatura do Código, Linguagens Embarcadas e + Segurança</emphasis> - As versões da plataforma HPCC Systems® anteriores a 6.0.0 sempre concederam algum controle em relação às operações permitidas no código ECL. Isso era feito (entre outros motivos) como forma de garantir que operações como PIPE ou C++ incorporado não possam ser usadas para contornar os controles de acesso sobre os arquivos através da leitura direta pelo sistema operacional. + As versões da plataforma HPCC Systems® + anteriores a 6.0.0 sempre concederam algum controle em relação às operações + permitidas no código ECL. Isso era feito (entre outros motivos) como forma + de garantir que operações como PIPE ou C++ incorporado não possam ser usadas + para contornar os controles de acesso sobre os arquivos através da leitura + direta pelo sistema operacional. - A versão 6.0.0 (e outras mais recentes) possui dois recursos que oferecem mais flexibilidade sobre o controle dessas operações. + A versão 6.0.0 (e outras mais recentes) possui dois recursos que + oferecem mais flexibilidade sobre o controle dessas operações. - Agora é possível limitar quais funções SERVICE são acionadas no tempo de compilação usando o atributo FOLD. Normalmente, por motivos de segurança, FOLD só deve ser acionado em módulos assinados. + Agora é possível limitar quais funções SERVICE são acionadas no + tempo de compilação usando o atributo FOLD. Normalmente, por motivos de + segurança, FOLD só deve ser acionado em módulos assinados. - É possível configurar os direitos de acesso (que controlam a capacidade de usar PIPE, C++ incorporado, ou o uso restrito de um SERVICE) como dependentes do código que está sendo assinado. Isso significa que podemos fornecer um código assinado na Biblioteca padrão ECL que faça uso desses recursos sem a necessidade de abri-lo a ninguém para acionar qualquer coisa. + É possível configurar os direitos de acesso (que controlam a + capacidade de usar PIPE, C++ incorporado, ou o uso restrito de um + SERVICE) como dependentes do código que está sendo assinado. Isso + significa que podemos fornecer um código assinado na Biblioteca padrão + ECL que faça uso desses recursos sem a necessidade de abri-lo a ninguém + para acionar qualquer coisa. Parâmetros de Configuração ECLCC - No Gerenciador de Configurações, o componente ECLCC Server possui uma guia denominada - Options. Esta guia permite inserir pares de valores de nome nas permissões para executar vários tipos de código ou plugins incorporados. + No Gerenciador de Configurações, o componente ECLCC Server possui + uma guia denominada Options. Esta guia + permite inserir pares de valores de nome nas permissões para executar + vários tipos de código ou plugins incorporados. Name - + - + @@ -48,38 +64,45 @@ --allowsigned - Permite a opção especificada se o código foi assinado e se há a presença de uma chave. + Permite a opção especificada se o código foi assinado e + se há a presença de uma chave. - Observação: Partes da Biblioteca padrão podem não funcionar se o uso do C++ e das definições externas for negado. De um modo geral allowsigned é preferencial. + Observação: Partes da Biblioteca padrão podem não funcionar se o uso + do C++ e das definições externas for negado. De um modo geral allowsigned é preferencial. Cluster - Especifica o cluster para o qual esta regra se aplica. Se o cluster for deixado em branco, a restrição se aplicará a todos os clusters no ambiente. + Especifica o cluster para o qual esta regra se aplica. Se o cluster + for deixado em branco, a restrição se aplicará a todos os clusters no + ambiente. Value - + - + cpp - Permitir/Negar C++ e outras linguagens incorporadas. Para linguagens diferentes de C++ e Cassandra, também deve ser instalado um plugin opcional. + Permitir/Negar C++ e outras linguagens incorporadas. Para + linguagens diferentes de C++ e Cassandra, também deve ser + instalado um plugin opcional. pipe: - Permitir/Negar o uso de aplicações externas através do comando PIPE. + Permitir/Negar o uso de aplicações externas através do + comando PIPE. @@ -91,28 +114,46 @@ datafile: - (Válido apenas para --allowedsigned). Isso especifica que o acesso aos dados é permitido apenas se o código tiver sido assinado e se houver uma chave. + (Válido apenas para --allowedsigned). Isso especifica que o + acesso aos dados é permitido apenas se o código tiver sido + assinado e se houver uma chave. - + Assinatura do Código - A assinatura do código é semelhante a forma com que os e-mails podem ser assinados, de forma a provar sua identidade e que o código não foi adulterado, usando o pacote padrão gpg. - - Um arquivo assinado conterá uma assinatura anexa com um hash criptográfico do conteúdo do arquivo e a chave privada do assinante. Qualquer pessoa que tiver a chave pública do assinante poderá verificar a validade da assinatura e que o conteúdo não foi alterado. - - Assinamos as definições SERVICE fornecidas pelos plugins padrão ECL e incluímos a chave pública na instalação da plataforma HPCC. O código que tenta usar as definições de serviço assinadas continuará funcionando como antes, porém o código que tentar acionar funções arbitrárias da biblioteca usando definições SERVICE fornecidas pelo usuário resultará em erros de compilação se o código não estiver assinado e se a configuração externa (veja acima) estiver definida para “deny” ou “allowsigned”. - - Administradores do sistema podem instalar chaves adicionais na máquina do ECLCC Server. Por isso, se você quiser usar suas próprias definições de serviço, elas podem ser assinadas usando uma chave que tenha sido instalada da seguinte forma: - - gpg --output <signed-ecl> --default-key <key-id> --clearsign <ecl-file-to-sign> - - Com este método, uma pessoa de confiança pode assinar o código para indicar que seu uso é aceitável por pessoas não confiáveis sem permitir que essas pessoas executem um código arbitrário. + A assinatura do código é semelhante a forma com que os e-mails podem + ser assinados, de forma a provar sua identidade e que o código não foi + adulterado, usando o pacote padrão gpg. + + Um arquivo assinado conterá uma assinatura anexa com um hash + criptográfico do conteúdo do arquivo e a chave privada do assinante. + Qualquer pessoa que tiver a chave pública do assinante poderá verificar a + validade da assinatura e que o conteúdo não foi alterado. + + Assinamos as definições SERVICE fornecidas pelos plugins padrão ECL + e incluímos a chave pública na instalação da plataforma HPCC. O código que + tenta usar as definições de serviço assinadas continuará funcionando como + antes, porém o código que tentar acionar funções arbitrárias da biblioteca + usando definições SERVICE fornecidas pelo usuário resultará em erros de + compilação se o código não estiver assinado e se a configuração externa + (veja acima) estiver definida para “deny” ou “allowsigned”. + + Administradores do sistema podem instalar chaves adicionais na + máquina do ECLCC Server. Por isso, se você quiser usar suas próprias + definições de serviço, elas podem ser assinadas usando uma chave que tenha + sido instalada da seguinte forma: + + gpg --output <signed-ecl> --default-key <key-id> --clearsign <ecl-file-to-sign> + + Com este método, uma pessoa de confiança pode assinar o código para + indicar que seu uso é aceitável por pessoas não confiáveis sem permitir + que essas pessoas executem um código arbitrário. diff --git a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_Using_Group_Function.xml b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_Using_Group_Function.xml index 08f864cdf52..8c93e28efd5 100644 --- a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_Using_Group_Function.xml +++ b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_Using_Group_Function.xml @@ -116,7 +116,7 @@ OUTPUT(i2); TRANSFORM(RECORDOF(ProgGuide.Accounts), SELF := LEFT)); ds0 := DISTRIBUTE(bf,RANDOM()) : PERSIST('~PROGGUIDE::PERSIST::TestGroupSort'); -ds1 := DISTRIBUTE(ds,HASH32(personid)); +ds1 := DISTRIBUTE(ds0,HASH32(personid)); // do a global sort s1 := SORT(ds0,personid,opendate,-balance); diff --git a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_control_ROXIE_queries.xml b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_control_ROXIE_queries.xml index 8572fda9358..43ad6adaa05 100644 --- a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_control_ROXIE_queries.xml +++ b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrG_control_ROXIE_queries.xml @@ -40,7 +40,7 @@ Thor - Os grafos são executados em múltiplos nós filhos em + Os grafos são executados em múltiplos nós secundários em paralelo. @@ -48,7 +48,7 @@ As leituras de índice/disco são feitas localmente por - cada nó filho. + cada nó secundário. diff --git a/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrGit_Source_Code.xml b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrGit_Source_Code.xml new file mode 100644 index 00000000000..6db5f5b2836 --- /dev/null +++ b/docs/PT_BR/ECLProgrammersGuide/PRG_Mods/PrGit_Source_Code.xml @@ -0,0 +1,573 @@ + + + + Repositório Git + + Git é um software de código aberto gratuito para controle de versão + distribuído. O Git rastreia alterações em qualquer conjunto de arquivos. Com + o Git, cada diretório Git em cada computador é um repositório completo com + histórico completo e recursos completos de rastreamento de versão. + + Consulte https://git-scm.com/ para obter mais + informações. + + HPCC Systems tem suporte para o servidor ECLCC para compilar código + ECL diretamente de repositórios Git. Os repositórios (e + ramificações/usuários opcionais) são configurados usando variáveis de + ambiente no servidor. Você pode enviar uma consulta de uma ramificação do + repositório e o servidor ECLCC extrairá o código-fonte de um repositório Git + e o compilará. Isso permite implantar uma versão específica de uma consulta + sem a necessidade de realizar qualquer trabalho no cliente. + + + Melhorias do Git + + A partir da versão 8.4, o código da plataforma para suporte ao Git + melhorou significativamente. Algumas dessas melhorias foram transportadas + para versões de suporte mais antigas, como 7.12. No entanto, você ainda + precisa atualizar para uma versão pontual recente para garantir que obterá + qualquer uma dessas melhorias. Embora as versões posteriores, como a 8.6, + incluam todas essas melhorias. + + + Melhoria na velocidade + + O código da plataforma foi atualizado para melhorias + significativas na velocidade. Apresentando compilação mais rápida a + partir de repositórios Git sem sobrecarga adicional quando comparado com + a compilação a partir de fontes verificadas. + + + + Recursos e manifestos Git + + A plataforma HPCC Systems agora oferece suporte a manifestos e + recursos Git durante a compilação. + + + + Suporte a Git-lfs + + Git-lfs é uma extensão do Git que melhora o suporte para arquivos + grandes e é compatível com GitHub e GitLab. Esta extensão é + particularmente útil para grandes recursos. Por exemplo, se você tiver + pacotes Java incluídos como parte do manifest. + + + + Suporte a Múltiplos Repositórios + + O código da plataforma HPCC Systems inclui suporte para o uso de + vários repositórios Git. Com esse suporte a múltiplos repositórios, a + plataforma HPCC Systems agora permite que cada repositório Git seja + tratado como um pacote independente e separado. As dependências entre os + repositórios são especificadas em um arquivo de pacote que é verificado + no repositório e versionado junto com o código ECL. O arquivo do pacote + indica quais são as dependências e quais versões devem ser + usadas. + + Essa abordagem resolve problemas como ao mesclar alterações de + diversas fontes em um único repositório. Nesse contexto resolve + problemas com alterações incompatíveis, dependências ou conflitos caso + existam módulos com o mesmo nome e garante que as dependências entre + repositórios sejam versionadas.. + + + + + Utilizando Git com HPCC + + A sintaxe --main foi estendida para permitir a compilação + diretamente do repositório. A sintaxe --main foi estendida para permitir a + compilação diretamente do repositório. + + Considere o seguinte comando: + + ecl run thor --main demo.main@https://github.com/gituser/gch-demo-d#version1 --server=... + + Este comando envia uma consulta ao Thor via ESP. Ele recupera o + código ECL da branch 'version1' no repositório + https://hithub.com/gituser/gch-demo-d. Compila o código no arquivo + demo/main.ecl e então executa a consulta no Thor. A verificação será feita + no servidor ECLCC remoto e não na máquina cliente. + + + Sintaxe de Referência do Repositório + + A sintaxe para a referência ao repositório é a seguinte: + + <protocol:>//<urn>/<user>/<repository>#version + + O protocolo e a urna podem ser omitidos e um padrão será usado. + Como no exemplo a seguir: + + ecl run thor --main demo.main@gituser/gch-ecldemo-d#version1 --server=... + + Este comando também envia uma consulta ao Thor, recupera o código + ECL da branch 'versão1' no repositório gch-demo-d. Compila o código no + arquivo demo.main.ecl e depois executa a consulta no Thor. + + + + Versão-Texto + + O texto da versão que segue o hash (#) na referência do + repositório pode assumir qualquer um dos seguintes formatos: + + + + Nome da branch + + + + O nome da tag + + Atenção: Atualmente, apenas + tags leves são suportadas. Tags anotadas ainda não são + suportadas. + + + + O algoritmo de hash seguro (SHA) de um commit + + + + Para ilustrar, considere os seguintes comandos: + + ecl run thor --main demo.main@gituser/gch-ecldemo-d#version1 --server=... + + Este comando recuperará o código ECL demo.main da branch + 'version1' do repositório gch-ecldemo-d. + + ecl run thor --main demo.main@gituser/gch-ecldemo-d#3c23ca0 --server=... + + Este comando irá recuperar o código ECL demo.main do commit com o + SHA de '3c23ca0'. + + Você também pode especificar o nome de uma tag utilizando a mesma + sintaxe. + + + + Verificando Sintaxe ECL + + Você pode usar a opção --syntax para verificar a sintaxe do seu + código. + + O comando a seguir verifica a sintaxe do código no commit com o + SHA de '3c23ca0' do repositório gch-ecldemo-d. + + ecl run thor --main demo.main@ghalliday/gch-ecldemo-d#3c23ca0 --syntax + + Embora o comando a seguir verifique a sintaxe do código na branch + 'versão1' do repositório gch-ecldemo-d. + + ecl run thor --main demo.main@ghalliday/gch-ecldemo-d#version1 --syntax + + Como o código em uma branch pode ser atualizado e alterado, é uma + boa ideia sempre verificar a sintaxe. + + + + O Pacote JSON + + Considere o arquivo package.json: + + { + "name": "demoRepoC", + "version": "1.0.0", + "dependencies": { + "demoRepoD": "gituser/gch-ecldemo-d#version1" + } +} + + O packagefile dá um nome ao pacote e define as dependências. A + propriedade dependências é uma lista de pares chave-valor. A chave + (demoRepoD) fornece o nome do módulo ECL usado para acessar o + repositório externo. O valor é uma referência de repositório que usa o + mesmo formato dos exemplos anteriores usando a sintaxe --main. + + + + Utiliza o Repositório Externo em seu Código ECL + + Para usar o repositório externo em seu código ECL, você precisa + adicionar uma definição de import. + + IMPORT layout; +IMPORT demoRepoD AS demoD; + +EXPORT personAsText(layout.person input) := + input.name + ': ‘ + + demoD.format.maskPassword(input.password); + + + No exemplo acima, o nome demoRepoD no segundo IMPORT corresponde + ao valor da chave no arquivo package.json. Este código usa o atributo + format.maskPassword da ramificação version1 do + gituser/gch-ecldemo-d. + + Cada pacote é processado independentemente de quaisquer outros. A + única conexão é através de importações explícitas de pacotes externos. É + por isso que os pacotes podem ter módulos ou atributos com o mesmo nome + e não entrarão em conflito. + + + + Exemplos de Múltiplos Repositórios + + A seguir está um exemplo de um arquivo package.json usando vários + repositórios. + + IMPORT layout; +IMPORT demoRepoD_V1 AS demo1; +IMPORT demoRepoD_V2 AS demo2; + +EXPORT personAsText(layout.person input) := +'Was: ' + demo1.format.maskPassword(input.password) + + ' Now: ' + demo2.format.maskPassword(input.password); +Observe que os repositórios demoRepoD _V1 e _V2 são + processados de forma independente. + + Da mesma forma, considere o exemplo a seguir usando Query + ECL + + { + "name": "demoRepoC", + "version": "1.0.0", + "dependencies": { + "demoRepoD_V1": "gituser/gch-ecldemo-d#version1" + "demoRepoD_V2": "gituser/gch-ecldemo-d#version2" + } +} + + + Observando as dependências das branchs 'versão1' e 'versão2' do + repositório gch-ecldemo-d. + + + + + Opções de linha de comando + + As opções de linha de comando foram adicionadas aos comandos ECL e + ECLCC para aproveitar essas melhorias no trabalho com repositórios + Git. + + + Opções de Desenvolvimento Local + + A opção -R foi adicionada aos comandos eclcc e ecl. Defina a opção + -R para instruir o compilador a usar a fonte de um diretório local em + vez de usar a fonte de um repositório externo. + + Sintaxe: + + -R<repo>[#version]=path Por + exemplo: + + ecl run examples/main.ecl -Rgituser/gch-ecldemo-d=/home/myuser/source/demod + + Este comando usa o código ECL para DemoRepoD de + /home/myuser/source/demoD em vez de + https://github.com/gituser/gch-ecldemo-d#version1. + + + + A opção detalhada + + A opção -v foi aprimorada para fornecer uma saída mais detalhada, + incluindo os detalhes das solicitações do Git.. + + Você pode usar a opção -v para depuração. Por exemplo, se você + tiver algum problema de repositórios não resolvido. Emita o comando a + seguir com a opção -v para analisar os detalhes das solicitações do + Git. + + ecl run examples/main.ecl -v -Rgituser/gch-ecldemo-d=/home/myuser/source/demod + + + + Opções Git de ECL e ECLCC + + Essas opções de linha de comando foram adicionadas aos comandos + ECL e ECLCC. + + --defaultgitprefix Esta opção de + linha de comando altera o prefixo padrão que é adicionado às referências + de pacotes relativos. O padrão também pode ser configurado usando a + variável de ambiente ECLCC_DEFAULT_GITPREFIX. Caso contrário, o padrão é + "https://github.com/". + + --fetchrepos Definir esta opção + informa se os repositórios externos que não foram clonados localmente + devem ser buscados. O padrão é true em 8.6.x. Pode ser útil definir esta + opção como false se todos os repositórios externos forem mapeados para + diretórios locais para verificar se estão sendo redirecionados + corretamente. + + --updaterepos Atualiza + repositórios externos que foram buscados localmente anteriormente. Esta + opção tem como padrão true. É útil definir essa opção como false se você + estiver trabalhando em uma situação sem acesso aos repositórios externos + ou para evitar a sobrecarga de verificar se há alterações, se você + souber que não há nenhuma. + + ECLCC_ECLREPO_PATH O diretório + para o qual os repositórios externos são clonados. Em uma máquina + cliente, o padrão é: <home>/.HPCCSystems/repos (ou + %APPDATA%\HPCCSystems\repos no Windows). Você pode excluir o conteúdo + desse diretório para forçar um download limpo de todos os + repositórios.T + + + + Opções de configuração do Chart Helm + + Estas são opções de gráfico do Helm para configurar valores Git + para implantações em nuvem. Os valores a seguir agora são suportados + para configurar o uso do Git nos gráficos do Helm para implementações em + nuvem do HPCC Systems. + + eclccserver.gitUsername - Fornece + o nome do usuário Git + + secrets.git - Define secrets.git + para permitir que repositórios sejam compartilhados entre consultas, + para poder armazenar em cache e compartilhar os pacotes clonados entre + instâncias. + + eclccserver.gitPlane - Esta opção + define o plano de armazenamento para o qual os pacotes externos são + retirados e clonados.. + + Por exemplo: + + eclccserver: +- name: myeclccserver + #... +- gitPlane: git/sample/storage + + Se a opção gitPlane não for fornecida, o padrão é o primeiro plano + de armazenamento com uma categoria de Git - caso contrário, o ECLCC + Server usará o primeiro plano de armazenamento com uma categoria de + dll. + + + + + Autenticação e Segurança + + Se os repositórios externos forem públicos, como bundles, não haverá + mais requisitos. Os repositórios privados têm a complicação adicional de + exigir informações de autenticação - no cliente ou no servidor ECLCC, + dependendo de onde a fonte está reunida. O Git fornece vários métodos para + fornecer essas credenciais.If external repositories are public, such as + bundles, then there are no further requirements. Private repositories have + the additional complication of requiring authentication information - + either on the client or on the ECLCC Server depending on where the source + is gathered. Git provides various methods for providing these + credentials. + + + Autenticação da Máquina Clente + + Estas são as abordagens recomendadas para configurar as + credenciais em um sistema local que está interagindo com um GitHub + remoto. + + + + Auntenticação github Baixe o + kit de ferramentas de linha de comando do GitHub. Você pode usá-lo + para autenticar todo o acesso Git com o seguinte comando: + + gh auth login + + Esta é provavelmente sua melhor opção se você estiver usando o + GitHub. Mais detalhes podem ser encontrados em: + + https://cli.github.com/manual/gh_auth_login + + + + ssh key Nesse cenário, a + chave ssh associada a uma máquina de desenvolvedores locais é + registrada na conta do GitHub. Isso é usado quando a referência do + GitHub está no formato ssh://github.com. + + A sshkey pode ser protegida com uma senha e existem várias + opções para evitar a necessidade de inserir a senha todas as vezes. + Para mais informações, veja: + + https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh + + + + Use um token de acesso + pessoal Estes são semelhantes a uma senha, mas com + restrições adicionais em seu tempo de vida e os recursos que podem + ser acessados. Aqui estão os detalhes sobre como criá-los. Eles + podem então ser usados com as várias opções de cache de credenciais + git. + + Um exemplo pode ser encontrado aqui: + + https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage + + + + Geralmente, para autenticação, é preferível usar o protocolo + https:// em vez do protocolo ssh:// para links em arquivos + package-lock.json. Se o ssh:// for usado, ele requer que qualquer + máquina que processe a dependência tenha acesso a uma chave ssh + registrada. Às vezes, isso pode causar problemas evitáveis. + + É provável que todas essas opções de autenticação envolvam alguma + interação do usuário, como senhas para chaves ssh, interação da Web com + autenticação do GitHub e entrada inicial para tokens de acesso em cache. + Isso é problemático para o servidor ECLCC, que não oferece suporte à + interação do usuário e, portanto, é preferível não passar credenciais. A + solução, portanto, é usar um token de acesso pessoal armazenado com + segurança como um segredo. Esse token poderia então ser associado a uma + conta de serviço especial, que iniciaria essas transações com segurança. + O segredo evita a necessidade de passar credenciais e permite que as + chaves sejam rotacionadas. + + + + Kubernetes Secrets + + Essa seção descreve o suporte a secrets em Kubernetes (e bare + metal) versions of the HPCC Systems platform. + + Para adicionar suporte a secrets: + + + + . Adicione um secrets ao arquivo yaml de personalização, com + uma chave que corresponda ao gitUsername: + + eclccserver: + - name: myeclccserver + gitUsername: gituser + + + Nota: o valor eclccserver.gitUsername deve corresponder ao seu + nome de usuário git. + + + + Adicione um secret ao arquivo yaml de personalização, com uma + chave que corresponda ao gitUsername + + secrets: + git: + gituser: my-git-secret + + + + + Adicione o secret ao Kubernetes contendo o token de acesso + pessoal: + + apiVersion: v1 +kind: Secret +metadata: + name: my-git-secret +type: Opaque +stringData: + password: ghp_eZLHeuoHxxxxxxxxxxxxxxxxxxxxol3986sS= + + + Note password contains the personal access token. + + + + Aplique o secretao seu Kubernetes usando o comando + kubectl:Apply the secret to your Kubernetes using the kubectl + command: + + kubectl apply -f ~/dev/hpcc/helm/secrets/my-git-secret + + Quando uma consulta é enviada ao servidor ECLCC, todos os + repositórios git são acessados usando esse nome de usuário e senha + configurados. + + + + Armazene o segredo em um cofre. Você também pode armazenar o + PAT (token de acesso pessoal) dentro de um cofre.Store the secret in + a vault. You can also store the PAT (personal access token) inside a + vault. + + + + + + Credenciais Bare Metal + + Esta seção descreve credenciais para sistemas bare metal. Os + sistemas bare metal requerem algumas etapas de configuração + semelhantes. + + + + Inclua a propriedade gitUsername na entrada EclCCServerProcess + no arquivo environment.xml. + + <EclCCServerProcess daliServers="mydali" + ... + gitUsername="gitguser“ + + + + + Envie o Environment.xml para todos os nós. + + + + Armazene as credenciais como secrets ou armazene em um + vault. + + Como secrets: + + Armazene o token de acesso em: + + /opt/HPCCSystems/secrets/git/<user-name>/password + + Por exemplo: + + cat /opt/HPCCSystems/secrets/git/gitusr/password +ghp_eZLHeuoHxxxxxxxxxxxxxxxxxxxxol3986sS= + + + Ou para o vault: + + Você pode armazenar dentro de um vault. Agora você pode + definir um vault seção Software do ambiente. Por exemplo: + + <Environment> + <Software> + ... + <vaults> + <git name='my-storage-vault' url="http://127.0.0.1:8200/v1/secret/data/git/${secret}" +kind="kv-v2" client-secret="myVaultSecret"/> + ... + </vaults> + ... + + + Observe que as entradas acima têm exatamente o mesmo conteúdo + que as entradas correspondentes no arquivo kubernetes + values.yaml. + + + + + diff --git a/docs/PT_BR/ECLProgrammersGuide/PrGd-Includer.xml b/docs/PT_BR/ECLProgrammersGuide/PrGd-Includer.xml index a697f981e37..17cc7dff342 100644 --- a/docs/PT_BR/ECLProgrammersGuide/PrGd-Includer.xml +++ b/docs/PT_BR/ECLProgrammersGuide/PrGd-Includer.xml @@ -193,4 +193,12 @@ xpointer="element(/1)" xmlns:xi="http://www.w3.org/2001/XInclude"/> + + + Managing Source Code + + + diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/AbortDfuWorkunit.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/AbortDfuWorkunit.xml index 6c09b1ef40e..e8d9ecde6b3 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/AbortDfuWorkunit.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/AbortDfuWorkunit.xml @@ -1,4 +1,4 @@ - + @@ -16,27 +16,37 @@ - + - + dfuwuid - Uma string terminada por nulo que contém o ID da workunit DFU (DFUWUID) do job a ser abortado. Esse valor é retornado pelas versões das funções Copy, SprayFixed, SprayVariable, SprayXML e Despray FileServices "com nome começando por f". + Uma string terminada por nulo que contém o ID da workunit DFU + (DFUWUID) do job a ser abortado. Esse valor é retornado pelas + versões das funções Copy, SprayFixed, SprayVariable, SprayXML e + Despray FileServices "com nome começando por f". espserverIPport - Opcional. Uma string terminada por nulo que contém o protocolo, o IP, a porta e o diretório ou DNS equivalente do programa do servidor' ESP. Normalmente são os mesmos IP e porta do ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ] ECL Watch, + com "/FileSpray" anexado. - A função AbortDfuWorkunit aborta a workunit DFU especificada. Normalmente, esse job foi iniciado com o parâmetro timeout definido como zero (0). + A função AbortDfuWorkunit aborta a + workunit DFU especificada. Normalmente, esse job foi iniciado com o + parâmetro timeout definido como zero (0). Exemplo: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Copy.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Copy.xml index b9e4dd60da3..592a674633c 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Copy.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Copy.xml @@ -105,18 +105,20 @@ espServerIPPort - Opcional. Uma string terminada por nulo que contém o - protocolo, o IP, a porta e o diretório ou DNS equivalente do - programa do servidor' ESP. Normalmente são os mesmos IP e porta do - ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor - contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ] ECL Watch, + com "/FileSpray" anexado. maxConnections - Opcional. Um inteiro que especifica o número máximo de - conexões. Se omitido, o padrão é um (1). + Opcional. Um inteiro especificando o número máximo de + conexões. Se omitido, o padrão é -1, o que indica que o sistema + escolhe um padrão adequado com base no tamanho do cluster. @@ -161,7 +163,8 @@ Opcional. Um indicador booleano TRUE ou FALSE que indica se o processo de cópia deve ser executado nos nós de origem enviando para os destinos, em vez de executado nos destinos e recebendo da origem. - Se omitido, o padrão é FALSE. + Esta opção só é válida dentro do mesmo ambiente. Se omitido, o + padrão é FALSE. diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/CurrentTime.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/CurrentTime.xml index b13b1829929..5778aed2a35 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/CurrentTime.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/CurrentTime.xml @@ -41,6 +41,9 @@ locais do cluster que calcula a hora. Se FALSE, será retornada a hora UTC. + Em sistemas conteinerizados, os servidores geralmente são configurados + para UTC, tornando a hora local e o UTC idênticos. + Exemplo: IMPORT STD; diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DataPatternsLibrary.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DataPatternsLibrary.xml new file mode 100644 index 00000000000..87c54285109 --- /dev/null +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DataPatternsLibrary.xml @@ -0,0 +1,739 @@ + + + + Biblioteca de Data Patterns + + Esta seção cobre os métodos de Data Patterns na Biblioteca + Padrão. + + + Perfil + + STD.DataPatterns.Profile + STD.DataPatterns.Profiles + + DataPatterns.Profiles + + Profile + + + Macro de função para criação de perfil de todo ou parte de um + dataset. A saída é um dataset contendo as seguintes informações para cada + atributo com perfil: + + A maioria das saídas de perfil pode ser desativada. Veja o argumento + 'features' abaixo. + + Os Data patterns podem dar uma ideia de como seus dados se parecem + quando são expressos como uma string (legível por humanos). A função + converte cada caractere da string em uma paleta de caracteres fixa para + produzir um "padrão de dados" e, em seguida, conta o número de padrões + exclusivos para esse atributo. + + Os padrões mais e menos populares dos dados serão mostrados na + saída, junto com o número de vezes que esse padrão aparece e um exemplo + (escolhido aleatoriamente dos dados reais). A paleta de caracteres + utilizada é: + + A Qualquer caractere em caixa-alta + + a Qualquer caractere em caixa-baixa + + 9 Qualquer dígito númerico + + B Um valor boleano (true ou false) + + Todos os outros caracteres são deixados como estão no padrão. + + Parâmetros + + + + + + inFile + + O dataset a processar; pode ser um dataset filho (por + exemplo, inFile.childDS); OBRIGATÓRIO + + + + fieldListStr + + Uma string contendo uma lista delimitada por vírgulas de + nomes de atributos a serem processados; use uma string vazia para + processar todos os atributos em inFile; OPCIONAL, o padrão é uma + string vazia + + + + maxPatterns + + O número máximo de padrões (populares e raros) a serem + retornados para cada atributo; OPCIONAL, o padrão é 100 + + + + maxPatternLen + + O comprimento máximo de um padrão; padrões mais longos são + truncados na saída; esse valor também é usado para definir o + comprimento máximo dos dados a serem considerados ao encontrar + valores de cardinalidade e modo; deve ser 33 ou maior; OPTIONAL, o + padrão é 100The maximum length of a pattern; longer patterns are + truncated in the output; this value is also used to set the + maximum length of the data to consider when finding cardinality + and mode values; must be 33 or larger; OPTIONAL, defaults to + 100 + + + + features + + Uma string delimitada por vírgula listando os elementos de + criação de perfil a serem incluídos na saída; OPCIONAL, o padrão é + uma string delimitada por vírgula contendo todas as palavras-chave + disponíveis mencionadas na tabela "palavras-chave". Para omitir a + saída associada a uma única palavra-chave, defina este argumento + como uma string delimitada por vírgula contendo todas as outras + palavras-chave; observe que a saída is_numeric aparecerá apenas se + os recursos min_max, mean, std_dev, quartis ou correlações + estiverem ativos; observe também que ativar o recurso + cardinality_breakdown também ativará o recurso cardinality, mesmo + que não esteja explicitamente ativado + + + + sampleSize + + Um número inteiro positivo que representa uma porcentagem + de inFile para examinar, o que é útil ao analisar um conjunto de + dados muito grande e apenas um perfil de dados estimado é + suficiente; intervalo válido para este argumento é 1-100; valores + fora desta faixa serão fixados; OPCIONAL, o padrão é 100 (o que + indica que todo o conjunto de dados será analisado) + + + + lcbLimit + + Um inteiro positivo (<= 1000) que indica a cardinalidade + máxima permitida para um atributo para emitir um detalhamento dos + valores do atributo; este parâmetro será ignorado se + cardinality_breakdown não for incluído no argumento features; + OPCIONAL, o padrão é 64 + + + + + + Atributos Retornados + + + + + + attribute + + O nome do atributo + + + + given_attribute_type + + O tipo ECL do atributo conforme foi definido no conjunto de + dataset + + + + best_attribute_type + + Um tipo de dados ECL que permite todos os valores no + dataset de entrada e consome a menor quantidade de memória + + + + rec_count + + O número de registros analisados no conjunto de dados; isso + pode ser menor que o número total de registros, se o argumento + sampleSize opcional for fornecido com um valor menor que + 100 + + + + fill_count + + O número de registros rec_count contendo valores não nulos; + um 'valor nulo' é uma string vazia, um zero numérico ou um SET + vazio; observe que os atributos BOOLEANOS são sempre contados como + preenchidos, independentemente de seu valor; além disso, os + atributos DATA de comprimento fixo (por exemplo, DATA10) também + são contados como preenchidos, devido à sua função típica de + manter blobs de dados + + + + cardinality + + O número de valores exclusivos não nulos dentro do + atributo + + + + cardinality_breakdown + + Para esses atributos com um número baixo de valores + exclusivos não nulos, mostre cada valor e o número de registros + que contêm esse valor; o parâmetro lcbLimit determina o que + significa "número baixo" + + + + modes + + Os valores mais comuns no atributo, após coagir todos os + valores para STRING, juntamente com o número de registros nos + quais os valores foram encontrados; se nenhum valor for repetido + mais de uma vez, nenhum modo será mostrado; até cinco (5) modos + serão mostrados; observe que os valores de string maiores que o + argumento maxPatternLen serão truncados + + + + min_length + + Para datatype do tipo SET, o menor número de elementos + encontrados no conjunto; para outros tipos de dados, o menor + comprimento de um valor quando expresso como string; valores nulos + são ignorados + + + + max_length + + Para datatype do tipo SET, o maior número de elementos + encontrados no conjunto; para outros tipos de dados, o maior + comprimento de um valor quando expresso como string; valores nulos + são ignorados + + + + ave_length + + Para o datatype do tipo SET, o número médio de elementos + encontrados no conjunto; para outros tipos de dados, o comprimento + médio de um valor quando expresso como string; valores nulos são + ignorados + + + + popular_patterns + + Os padrões de valores mais comuns; Veja abaixo + + + + rare_patterns + + Os padrões menos comuns de valores; Veja abaixo + + + + is_numeric + + Booleano indicando se o atributo original era um escalar + numérico ou se o valor best_attribute_type era um escalonador + numérico; se TRUE, os campos de saída numeric_xxxx serão + preenchidos com valores reais; se este valor for FALSE, todos os + valores de saída numeric_xxxx devem ser ignorados + + + + numeric_min + + O menor valor não nulo encontrado no atributo como DECIMAL; + este valor é válido apenas se is_numeric for TRUE; se is_numeric + for FALSE, zero será exibido aqui + + + + numeric_max + + O maior valor não nulo encontrado no atributo como DECIMAL; + este valor é válido apenas se is_numeric for TRUE; se is_numeric + for FALSE, zero será exibido aqui + + + + numeric_mean + + O valor médio (médio) não nulo encontrado no atributo como + DECIMAL; este valor é válido apenas se is_numeric for TRUE; se + is_numeric for FALSE, zero será exibido aqui + + + + numeric_std_dev + + O desvio padrão dos valores não nulos no atributo como + DECIMAL; este valor é válido apenas se is_numeric for TRUE; se + is_numeric for FALSE, zero será exibido aqui + + + + numeric_lower_quartile + + O valor que separa o primeiro (inferior) e o segundo + trimestre de valores não nulos dentro do atributo como um DECIMAL; + este valor é válido apenas se is_numeric for TRUE; se is_numeric + for FALSE, zero será exibido aqui + + + + numeric_median + + O valor mediano não nulo dentro do atributo como DECIMAL; + este valor é válido apenas se is_numeric for TRUE; se is_numeric + for FALSE, zero será exibido aqui + + + + numeric_upper_quartile + + O valor que separa o terceiro e o quarto (superior) + trimestres de valores não nulos dentro do atributo como um + DECIMAL; este valor é válido apenas se is_numeric for TRUE; se + is_numeric for FALSE, zero será exibido aqui + + + + correlations + + Um dataset filho contendo valores de correlação comparando + o atributo numérico atual com todos os outros atributos numéricos, + listados em ordem de valor de correlação decrescente; o atributo + deve ser um tipo de dados ECL numérico; atributos não numéricos + retornarão um dataset filho vazio; observe que esta pode ser uma + operação demorada, dependendo do número de atributos numéricos em + seu dataset e do número de linhas (se você tiver N atributos + numéricos, N (N - 1) / 2 cálculos serão executados, cada um + verificando todos linhas de dados) + + + + + + + + + + PALAVRA-CHAVE + + OUTPUT AFETADO + + + + fill_rate + + fill_rate, fill_count + + + + cardinality + + cardinality + + + + cardinality_breakdown + + cardinality_breakdown + + + + best_ecl_types + + best_attribute_type + + + + modes + + modes + + + + lengths + + min_length, max_length, ave_length + + + + patterns + + popular_patterns, rare_patterns + + + + min_max + + numeric_min, numeric_max + + + + mean + + numeric_mean + + + + std_dev + + numeric_std_dev + + + + quartiles + + numeric_lower_quartile, numeric_median, + numeric_upper_quartile + + + + correlations + + correlations + + + + + + Example: + + IMPORT Std; +Profile(inFile, + fieldListStr = '\'\'', + maxPatterns = 100, + maxPatternLen = 100, + features = '\'fill_rate,best_ecl_types,cardinality,cardinality_breakdown,modes,lengths,patterns,min_max,mean,std_dev,quartiles,correlations\'', + sampleSize = 100, + lcbLimit = 64) := FUNCTIONMACRO + + + + Melhor Estrutura de Registro + + STD.DataPatterns.BestRecordStructure + STD.DataPatterns.BestRecordStructure + + DataPatterns.BestRecordStructure + + BestRecordStructure + + + Macro de função que utiliza DataPatterns para retornar uma string + que define a melhor estrutura de registro ECL para os dados de + entrada. + + + + + + inFile + + O dataset a processar; OBRIGATÓRIO + + + + sampling + + Um número inteiro positivo que representa uma porcentagem + de inFile a ser examinada, o que é útil ao analisar um dataset + muito grande e apenas uma estimativa é suficiente; intervalo + válido para este argumento é 1-100; valores fora desta faixa serão + fixados; OPCIONAL, o padrão é 100 (o que indica que todo o dataset + será analisado) + + + + emitTransform + + Booleano que controla se a função emite uma função + TRANSFORM que pode ser usada para reescrever o dataset na 'melhor' + definição de registro; OPCIONAL, o padrão é FALSO. + + + + textOutput + + Booleano que rege o tipo de resultado que é entregue por + esta função; se for FALSE, um conjunto de registros de STRINGs + será retornado; se for TRUE então um dataset com um único campo + STRING, com o conteúdo formatado para HTML, será retornado (essa é + a saída ideal se a intenção for copiar a saída do ECL Watch); + OPCIONAL, o padrão é FALSO + + + + + + A melhor estrutura de registro retorna um recordset que define a + melhor estrutura de registro ECL para os dados. Se textOutput for FALSE (o + padrão), cada registro conterá uma declaração de campo e a lista de + declarações será agrupada com as strings RECORD e END; se o argumento + emitTransform for TRUE, haverá também um recordset que compreendem uma + função TRANSFORM independente. Se textOutput for TRUE, apenas um registro + será retornado, contendo uma string formatada em HTML contendo as novas + declarações de campo (e opcionalmente o TRANSFORM); este é o formato ideal + se a intenção for copiar o resultado do ECL Watch. + + Exemplo: + + BestRecordStructure(inFile, sampling = 100, emitTransform = FALSE, textOutput = FALSE) := FUNCTIONMACRO + LOADXML('<xml/>'); + #EXPORTXML(bestInFileFields, RECORDOF(inFile)); + #UNIQUENAME(bestFieldStack); + #UNIQUENAME(bestStructType); + #UNIQUENAME(bestLayoutType); + #UNIQUENAME(bestCapturedPos); + #UNIQUENAME(bestPrevCapturedPos); + #UNIQUENAME(bestLayoutName); + #UNIQUENAME(bestNeedsDelim); + #UNIQUENAME(bestNamePrefix); + #UNIQUENAME(recLevel); +IMPORT Std; + + + + Benford + + STD.DataPatterns.Benford + STD.DataPatterns.Benford + + DataPatterns.Benford + + Benford + + + A lei de Benford, também chamada de lei de Newcomb-Benford, ou lei + dos números anômalos, é uma observação sobre a distribuição de frequência + dos dígitos iniciais em muitos conjuntos de dados numéricos da vida + real. + + A lei de Benford não se aplica a todos os conjuntos de números, mas + geralmente se aplica a grandes conjuntos de números que ocorrem + naturalmente com alguma conexão como: + + * Valores de mercado de ações das empresas + + * Dados encontrados em textos - como o Reader's Digest ou uma cópia + da Newsweek + + * Dados demográficos, incluindo populações estaduais e + municipais + + * Dados de imposto de renda + + * Tabelas matemáticas, como logaritmos + + * Taxas de drenagem do rio + + * Dados científicos + + A lei geralmente não se aplica a conjuntos de dados que têm um + mínimo e um máximo declarados, como taxas de juros ou salários por hora. + Se os números forem atribuídos, em vez de ocorrerem naturalmente, eles + também não seguirão a lei. Exemplos de números atribuídos incluem: códigos + postais, números de telefone e números de CPF. + + Maiores informações: + https://en.wikipedia.org/wiki/Benford%27s_law + + Esta função calcula a distribuição de dígitos em um ou mais + atributos em um conjunto de dados e exibe o resultado, um atributo por + linha, com uma linha "esperada" mostrando as distribuições esperadas. + Incluído em cada linha de dados está um cálculo qui-quadrado para essa + linha indicando o quão bem o resultado calculado corresponde ao resultado + esperado (se o valor qui-quadrado exceder o mostrado na linha --EXPECTED-- + então a linha de dados NÃO SEGUE Lei de Benford). + + Observe que ao calcular a distribuição do dígito mais significativo, + o dígito zero é ignorado. Assim, por exemplo, os valores 0100, 100, 1,0, + 0,10 e 0,00001 têm um dígito mais significativo de '1'. O dígito zero é + considerado para todas as outras posições. + + + + + + inFile + + O conjunto de dados a processar; OBRIGATÓRIO + + + + fieldListStr + + Uma string contendo uma lista delimitada por vírgulas de + nomes de atributos a serem processados; observe que os atributos + listados aqui devem ser atributos de nível superior (não registros + filhos ou datasets de dados filhos); use uma string vazia para + processar todos os atributos de nível superior em inFile; + OPCIONAL, o padrão é uma string vazia + + + + digit + + O dígito baseado em 1 dentro do número a ser examinado; o + primeiro dígito significativo é '1' e só aumenta; OPCIONAL, o + padrão é 1, significando o dígito diferente de zero mais + significativo + + + + sampleSize + + Um número inteiro positivo que representa uma porcentagem + de inFile a ser examinada, o que é útil ao analisar um conjunto de + dados muito grande e apenas uma análise de dados estimada é + suficiente; intervalo válido para este argumento é 1-100; valores + fora desta faixa serão fixados; OPCIONAL, o padrão é 100 (o que + indica que todas as linhas do conjunto de dados serão + usadas) + + + + + + Benford retorna um novo dataset com a seguinte estrutura de + registro: + + RECORD + + STRING attribute; // Name of data attribute examined + + DECIMAL4_1 zero; // Percentage of rows with digit of '0' + + DECIMAL4_1 one; // Percentage of rows with digit of '1' + + DECIMAL4_1 two; // Percentage of rows with digit of '2' + + DECIMAL4_1 three; // Percentage of rows with digit of '3' + + DECIMAL4_1 four; // Percentage of rows with digit of '4' + + DECIMAL4_1 five; // Percentage of rows with digit of '5' + + DECIMAL4_1 six; // Percentage of rows with digit of '6' + + DECIMAL4_1 seven; // Percentage of rows with digit of '7' + + DECIMAL4_1 eight; // Percentage of rows with digit of '8' + + DECIMAL4_1 nine; // Percentage of rows with digit of '9' + + DECIMAL7_3 chi_squared; // Chi-squared "fitness test" result + + UNSIGNED8 num_values; // Number of rows with non-zero values for + this attribute + + END; + + Os campos de dígitos nomeados (por exemplo, "zero" e "um" e assim + por diante) representam o dígito * encontrado na posição 'dígito' do + atributo associado. Os valores * que aparecem ali são porcentagens. + num_values mostra o número * de valores diferentes de zero processados e + qui_quadrado mostra o resultado da aplicação * desse teste usando os + valores de distribuição observados versus esperados. + + A primeira linha dos resultados mostrará os valores esperados para + os * dígitos nomeados, com "-- EXPECTED DIGIT n --" exibido como o nome do + atributo. 'n' será * substituído pelo valor de 'digit' que indica qual a + posição do dígito * foi examinada. + + Observe que ao visualizar os resultados para o dígito mais + significativo (dígito = 1), * o campo 'zero' mostrará um valor -1, + indicando que foi ignorado. + + Exemplo: + + Benford(inFile, fieldListStr = '\'\'', digit = 1, sampleSize = 100) := FUNCTIONMACRO + + #UNIQUENAME(minDigit); + LOCAL %minDigit% := MAX((INTEGER)digit, 1); + + #UNIQUENAME(clampedDigit); + LOCAL %clampedDigit% := MIN(%minDigit%, 4); + + // Chi-squared critical value table: + // https://www.itl.nist.gov/div898/handbook/eda/section3/eda3674.htm + + // Chi-squared critical values for 8 degrees of freedom at various probabilities + // Probability: 0.90 0.95 0.975 0.99 0.999 + // Critical value: 13.362 15.507 17.535 20.090 26.125 + #UNIQUENAME(CHI_SQUARED_CRITICAL_VALUE_1); + #SET(CHI_SQUARED_CRITICAL_VALUE_1, 20.090); // 99% probability + + // Chi-squared critical values for 9 degrees of freedom at various probabilities + // Probability: 0.90 0.95 0.975 0.99 0.999 + // Critical value: 14.684 16.919 19.023 21.666 27.877 + #UNIQUENAME(CHI_SQUARED_CRITICAL_VALUE_2); + #SET(CHI_SQUARED_CRITICAL_VALUE_2, 21.666); // 99% probability + + #UNIQUENAME(CHI_SQUARED_CRITICAL_VALUE); + LOCAL %CHI_SQUARED_CRITICAL_VALUE% := IF(%clampedDigit% = 1, %CHI_SQUARED_CRITICAL_VALUE_1%, %CHI_SQUARED_CRITICAL_VALUE_2%); + + #UNIQUENAME(expectedDistribution); + LOCAL %expectedDistribution% := DATASET + ( + [ + {1, -1, 30.1, 17.6, 12.5, 9.7, 7.9, 6.7, 5.8, 5.1, 4.6}, + {2, 12.0, 11.4, 10.9, 10.4, 10.0, 9.7, 9.3, 9.0, 8.8, 8.5}, + {3, 10.2, 10.1, 10.1, 10.1, 10.0, 10.0, 9.9, 9.9, 9.9, 9.8}, + {4, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0} + ], + { + UNSIGNED1 pos, + DECIMAL4_1 zero, + DECIMAL4_1 one, + DECIMAL4_1 two, + DECIMAL4_1 three, + DECIMAL4_1 four, + DECIMAL4_1 five, + DECIMAL4_1 six, + DECIMAL4_1 seven, + DECIMAL4_1 eight, + DECIMAL4_1 nine + } + ); + + // Remove all spaces from field list so we can parse it more easily + #UNIQUENAME(trimmedFieldList); + LOCAL %trimmedFieldList% := TRIM((STRING)fieldListStr, ALL); + + // Ungroup the given dataset, in case it was grouped + #UNIQUENAME(ungroupedInFile); + LOCAL %ungroupedInFile% := UNGROUP(inFile); + + // Clamp the sample size to something reasonable + #UNIQUENAME(clampedSampleSize); + LOCAL %clampedSampleSize% := MAX(1, MIN(100, (INTEGER)sampleSize)); + + // Create a sample dataset if needed + #UNIQUENAME(sampledData); + LOCAL %sampledData% := IF + ( + %clampedSampleSize% < 100, + ENTH(%ungroupedInFile%, %clampedSampleSize%, 100, 1, LOCAL), + %ungroupedInFile% + ); +IMPORT Std; + + + + + + diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeSpray.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeSpray.xml index def908431d7..fd5db62fd69 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeSpray.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeSpray.xml @@ -17,7 +17,8 @@ espserverIPport ] , [ maxConnections ] , [ - allowoverwrite allowoverwrite ],[ + destinationPlane ]) dfuwuid := @@ -34,12 +35,13 @@ espserverIPport ] , [ maxConnections ] , [ - allowoverwrite ]); + allowoverwrite ],[ + destinationPlane ]) - + @@ -54,8 +56,9 @@ destinationIP - Uma string terminada por nulo que contém o endereço IP de - destino do arquivo. + Uma string terminada em nulo contendo o endereço IP de + destino do arquivo. Obsoleto, você deve usar destinationPlane em vez + disso. @@ -77,11 +80,12 @@ espserverIPport - Opcional. Uma string terminada por nulo que contém o - protocolo, o IP, a porta e o diretório ou DNS equivalente do - programa do servidor' ESP. Normalmente são os mesmos IP e porta do - ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor - contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. @@ -99,6 +103,16 @@ Se omitido, o padrão é FALSE. + + destinationPlane + + Opcional. O plano de armazenamento. Observação: + destinationPlane não deve ser utilizado ao + mesmo tempo que destinationIP. Em um ambiente + conteinerizado, o destinationPlane é necessário + se você tiver mais de uma Landing Zone. + + dfuwuid diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeleteSuperFile.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeleteSuperFile.xml index 530ac60fd60..85964892783 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeleteSuperFile.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DeleteSuperFile.xml @@ -1,4 +1,4 @@ - + @@ -10,28 +10,32 @@ File.DeleteSuperFile DeleteSuperFile - ( superfile [ , subdeleteflag ( superName [ , deletesub ] ) - + - + - superfile + superName - Uma string terminada por nulo que contém o nome lógico do superarquivo. + Uma string terminada por nulo que contém o nome lógico do + superarquivo. - subdeleteflag + deletesub - Um valor booleano que indica se os subarquivos devem ser excluídos. Se omitido, o padrão é FALSE. Essa opção não deverá ser usada se o superarquivo contiver qualquer arquivo ou superarquivo estrangeiro. + Um valor booleano que indica se os subarquivos devem ser + excluídos. Se omitido, o padrão é FALSE. Essa + opção não deverá ser usada se o superarquivo contiver qualquer + arquivo ou superarquivo estrangeiro. @@ -43,7 +47,8 @@ - A função DeleteSuperFile remove o superarquivo. + A função DeleteSuperFile remove o + superarName superfile. Essa função não é incluída em uma transação do superarquivo. diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DfuPlusExec.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DfuPlusExec.xml index 7858ff46050..d45c78fb265 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DfuPlusExec.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/DfuPlusExec.xml @@ -23,10 +23,10 @@ commandline - Uma string terminada por nulo que contém a linha de comando - do DFUPlus.exe a ser executada. Os argumentos válidos estão - documentados no manual das Ferramentas de cliente, na seção que - descreve o programa DfuPlus.exe. + Uma string terminada em nulo contendo a linha de comando do + DFUPlus a ser executada. Os argumentos válidos estão documentados no + manual Client Tools, na seção que descreve o programa Command Line + DFU. @@ -34,25 +34,32 @@ A ação DfuPlusExec executa a linha de comando especificada da mesma forma que o - programa DfuPLus.exe. Essa ação simplesmente disponibiliza toda a - funcionalidade do programa DfuPLus.exe no código ECL. + programa executável DfuPlus faria. Isso permite que você tenha todas as + funcionalidades do DfuPlus disponíveis em seu código ECL. + + A menos que você precise acessar uma instância externa da plataforma, + o server= parâmetro para DfuPlus deve ser omitido, que então assume como + padrão o valor contido na configuração do ambiente. Em um sistema + conteinerizado, o padrão é o serviço eclservices local. Se por algum motivo + isso não funcionar, o padrão pode ser substituído pelo valor definido em + global.defaultEsp. Em um sistema bare-metal, esse é o serviço denominado + WsSMC (interno ao ECLWatch). Exemplo: IMPORT STD; - -serv := 'server=http://10.150.50.12:8010 '; -user := 'username=rlor '; -pswd := 'password=password '; -over := 'overwrite=1 '; +usr := 'username=emilyd '; +pwd := 'password=password '; +ovr := 'overwrite=1 '; repl := 'replicate=1 '; - -action := 'action=despray '; -dstip := 'dstip=10.150.50.14 '; -dstfile := 'dstfile=c:\\import\\despray\\timezones.txt '; -srcname := 'srcname=RTTEMP::timezones.txt '; - -cmd := serv + user + pswd + over + repl + action + dstip + dstfile + srcname; -STD.File.DfuPlusExec(cmd); - +action := 'action=spray '; +srcplane := 'srcplane=mydropzone '; +srcfile := 'srcfile=originalperson '; +dstname := 'dstname=EmilyTutorial::originalperson '; +dstcluster := 'dstcluster=data '; +fmt := 'format=fixed '; +recsize := 'recordsize=124 '; +cmd := usr + pwd + ovr + repl + action + srcplane + + srcfile + dstname + dstcluster + fmt + recsize; +STD.File.DfuPlusExec(cmd); diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/EncodeBase64.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/EncodeBase64.xml index 4af1a1c3f4f..5c2f0686d85 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/EncodeBase64.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/EncodeBase64.xml @@ -12,8 +12,8 @@ EncodeBase64 ( value [ , insertLF ] ) + role="bold">] ) @@ -29,13 +29,22 @@ codificados. + + insertLF + + Opcional. Uma flag booleano TRUE/FALSE indicando que, quando + TRUE, faz com que feeds de linha sejam inseridos periodicamente na + saída, possivelmente resultando em uma string de várias linhas. Se + omitido, o padrão é TRUE. + + insertLF Opcional. Um parâmetro booleano TRUE/FALSE indicando que quando TRUE uma nova linha será adicionada periodicamente à saída, - potencialmente resultando em uma string com múltiplas linhas. - Caso omitido, o valor padrão é TRUE. + potencialmente resultando em uma string com múltiplas linhas. Caso + omitido, o valor padrão é TRUE. diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Find.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Find.xml index cb64cb66bee..d0aaca5be4f 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Find.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Find.xml @@ -78,7 +78,8 @@ . Se target não for encontrado ou a instance especificada for maior que o número de ocorrências do target em source, - Find retornará zero (0). + Find retornará zero (0). Os espaços à + direita são considerados significativos quando comparados. Exemplo: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetEspUrl.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetEspUrl.xml index 634907f1598..ebd3dec8682 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetEspUrl.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetEspUrl.xml @@ -1,4 +1,4 @@ - + @@ -16,45 +16,48 @@ - + - + username - Opcional. Uma STRING que contém um nome do usuário para - uso no acesso autenticado ao processo do ESP. Se omitida, indica - que não é necessário autenticar o usuário. + Opcional. Uma STRING que contém um nome do usuário para uso + no acesso autenticado ao processo do ESP. Se omitida, indica que não + é necessário autenticar o usuário. userPW - Opcional. Uma STRING que contém a senha a ser usada com - o usuário citado no argumento username. Se o - username estiver vazio, isso será ignorado + Opcional. Uma STRING que contém a senha a ser usada com o + usuário citado no argumento username. Se o + username estiver vazio, isso será + ignorado Retorno: - GetEspUrl retorna um STRING contendo a URL completa (incluindo - porta e esquema HTTP) para um processo do servidor ESP. Se mais de um processo ESP - estiver definido, será retornado o primeiro processo encontrado. Retorna - uma string vazia se não for possível encontrar um processo do servidor ESP no - ambiente. + GetEspUrl retorna um STRING contendo a URL completa + (incluindo porta e esquema HTTP) para um processo do servidor ESP. + Se mais de um processo ESP estiver definido, será retornado o + primeiro processo encontrado. Retorna uma string vazia se não for + possível encontrar um processo do servidor ESP no ambiente. - A função GetEspUrl retorna a - URL completo para um processo do servidor ESP. + A função GetEspUrl retorna a URL + completo para um processo do servidor ESP. Exemplo: - EspAddress := STD.File.GetEspUrl + IMPORT STD; +EspAddress := STD.File.GetEspUrl(); +EspAddress; diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetNoCommonDefault.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetNoCommonDefault.xml new file mode 100644 index 00000000000..b66b8945625 --- /dev/null +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetNoCommonDefault.xml @@ -0,0 +1,49 @@ + + + + GetNoCommonDefault + + STD.File.GetNoCommonDefault + STD.File.GetNoCommonDefault + + File.GetNoCommonDefault + + GetNoCommonDefault + ( ) + + + + + + + + + + Retorno: + + GetNoCommonDefault returns a BOOLEAN value + + + + + + A função GetNoCommonDefault retorna o + valor booleano da propriedade 'noCommon' na configuração do sistema se ela + estiver definida. Caso contrário, retorna 'true' como padrão. + + Exemplo: + + IMPORT STD; +A := STD.File.GetNoCommonDefault(); + + + + + Veja também: SprayFixed, SprayXML, SprayJSON, SprayDelimited + + + diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetUniqueInteger.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetUniqueInteger.xml index 262670a39e0..03588473eab 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetUniqueInteger.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetUniqueInteger.xml @@ -41,8 +41,8 @@ A função GetUniqueInteger retorna um - número que é único entre todos os nós escravos do dali - especificado. + número que é único entre todos os nós secundários do + dali especificado. Exemplo: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorFile.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorFile.xml index 04e3a0be54b..faaea2662c4 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorFile.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorFile.xml @@ -88,11 +88,12 @@ espserverIPport - Opcional. Uma string terminada por nulo que contém o - protocolo, o IP, a porta e o diretório ou DNS equivalente do - programa do servidor' ESP. Normalmente são os mesmos IP e porta do - ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor - contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorLogicalFileName.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorLogicalFileName.xml index 487ae441455..220d1319969 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorLogicalFileName.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonitorLogicalFileName.xml @@ -65,11 +65,12 @@ espserverIPport - Opcional. Uma string terminada por nulo que contém o - protocolo, o IP, a porta e o diretório ou DNS equivalente do - programa do servidor' ESP. Normalmente são os mesmos IP e porta do - ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor - contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonthsBetween.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonthsBetween.xml index e25f4c5a193..a15d5ae32bc 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonthsBetween.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/MonthsBetween.xml @@ -13,7 +13,7 @@ - + @@ -30,6 +30,16 @@ O valor da última data, no formato Date_t. + + month_ends_equal + + Opcional. Se TRUE e ambas as datas caírem no último dia de + seus respectivos meses, a diferença entre as datas será tratada como + meses inteiros, independentemente dos valores reais dos dias. Se for + FALSE então o valor do dia de cada data é considerado no cálculo da + diferença. O padrão é FALSE + + Return: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/RemoteDirectory.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/RemoteDirectory.xml index f50bd9070e2..27e4495ccbb 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/RemoteDirectory.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/RemoteDirectory.xml @@ -10,8 +10,8 @@ File.RemoteDirectory RemoteDirectory - ( machineIP, directory - [ , mask ( machineIP, dir [ , mask ][ , recurse ] ) @@ -31,7 +31,7 @@ - directory + dir Uma string terminada por nulo que contém a path para os diretório para leitura. A string deve estar no formato adequado para diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Replicate.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Replicate.xml index 224bb768159..fa3e1d653f5 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Replicate.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Replicate.xml @@ -1,4 +1,4 @@ - + @@ -13,48 +13,62 @@ ( filename [ , timeout ] [ , espserverIPport ]) + role="bold">]) - dfuwuid := STD.File.fReplicate( filename dfuwuid := + STD.File.fReplicate( filename [ , timeout ] [ , espserverIPport ]); - + - + filename - Uma string terminada por nulo que contém o nome lógico do arquivo. + Uma string terminada por nulo que contém o nome lógico do + arquivo. timeout - Opcional. Um valor inteiro que indica a configuração de tempo limite. Se omitido, o padrão é -1. Se definido como (0), o controle da execução retorna imediatamente à workunit ECL sem esperar a conclusão da workunit DFU. + Opcional. Um valor inteiro que indica a configuração de tempo + limite. Se omitido, o padrão é -1. Se definido como (0), o controle + da execução retorna imediatamente à workunit ECL sem esperar a + conclusão da workunit DFU. espserverIPport - Opcional. Uma string terminada por nulo que contém o protocolo, o IP, a porta e o diretório ou DNS equivalente do programa do servidor' ESP. Normalmente são os mesmos IP e porta do ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. dfuwuid - O nome do atributo que receberá a string terminada por nulo que contém o ID da tarefa DFU (DFUWUID) gerada para o job. + O nome do atributo que receberá a string terminada por nulo + que contém o ID da tarefa DFU (DFUWUID) gerada para o job. - A função Replicate copia as partes individuais de filename para os discos espelho do cluster. Normalmente, isso significa que a parte do arquivo na unidade C de um nó é copiada para a unidade D do nó vizinho. + A função Replicate copia as partes + individuais de filename para os discos espelho do + cluster. Normalmente, isso significa que a parte do arquivo na unidade C de + um nó é copiada para a unidade D do nó vizinho. Example: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmail.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmail.xml index a96c5940ef2..327bc39c6b6 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmail.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmail.xml @@ -1,4 +1,4 @@ - + @@ -12,55 +12,94 @@ Email.SendEmail SendEmail - ( sendto, subject, body, server, port, sender ) + ( to, subject, body, attachment, + mimietype, filename, mailServer, port, sender, cc, bcc, + highPriority ) - + - + - sendto + to - Uma string terminada por nulo que contém uma lista delimitada por vírgulas dos endereços dos destinatários. A validade dos endereços não é verificada. Portanto, é responsabilidade do programador garantir essa validade. + Uma string terminada por nulo que contém uma lista delimitada + por vírgulas dos endereços dos destinatários. A validade dos + endereços não é verificada. Portanto, é responsabilidade do + programador garantir essa validade. subject - Uma string terminada por nulo que contém a linha de assunto. + Uma string terminada por nulo que contém a linha de + assunto. body - Uma string terminada por nulo que contém o texto do e-mail a ser enviado. Essa string deve ter a codificação de caracteres "ISO-8859-1 (latin1)" (o conjunto de caracteres padrão do ECL). Texto em qualquer outro conjunto de caracteres deve ser enviado como anexo (consulte a função STD.System.Email.SendEmailAttachText()). + Uma string terminada por nulo que contém o texto do e-mail a + ser enviado. Essa string deve ter a codificação de caracteres + "ISO-8859-1 (latin1)" (o conjunto de caracteres padrão do ECL). + Texto em qualquer outro conjunto de caracteres deve ser enviado como + anexo (consulte a função + STD.System.Email.SendEmailAttachText()). server - Opcional. Uma string terminada por nulo que contém o nome do servidor de e-mail. Se omitida, assume o valor padrão da variável de ambiente SMTPserver. + Opcional. Uma string terminada por nulo que contém o nome do + servidor de e-mail. Se omitida, assume o valor padrão da variável de + ambiente SMTPserver. port - Opcional. Um valor inteiro UNSIGNED4 que contém o número da porta. Se omitido, assume o valor padrão da variável de ambiente SMTPport. + Opcional. Um valor inteiro UNSIGNED4 que contém o número da + porta. Se omitido, assume o valor padrão da variável de ambiente + SMTPport. sender - Opcional. Uma string terminada por nulo que contém o endereço do remetente. Se omitida, assume o valor padrão da variável de ambiente emailSenderAddress. + Opcional. Uma string terminada por nulo que contém o endereço + do remetente. Se omitida, assume o valor padrão da variável de + ambiente emailSenderAddress. + + + + cc + + Optional. comma-delimited addresses of carbon-copy + recipients. Defaults to an empty string (none). + + + + bcc + + Optional. comma-delimited addresses of blind-carbon-copy + recipients. Defaults to an empty string (none). + + + + highPriority + + Optional. If true, the message is sent with high priority. + Defaults to false (normal priority). - A função SendEmail envia uma mensagem de e-mail. + A função SendEmail envia uma + mensagem de e-mail. Exemplo: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachData.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachData.xml index 1bb088fbb9f..4ab8f7319bf 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachData.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachData.xml @@ -12,9 +12,9 @@ Email.SendEmailAttachData SendEmailAttachData - ( sendto, subject, body, attachment, - mimietype, filename, server, port, sender - ) + ( to, subject, body, attachment, + mimietype, filename, mailServer, port, sender, cc, bcc, + highPriority ) @@ -75,7 +75,7 @@ - server + mailserver Opcional. Uma string terminada por nulo que contém o nome do servidor de e-mail. Se omitida, assume o valor padrão da variável de @@ -97,6 +97,28 @@ do remetente. Se omitida, assume o valor padrão da variável de ambiente emailSenderAddress. + + + cc + + Opcional. Endereços de destinatários em cópia delimitados por + vírgulas. O padrão é uma string vazia (nenhuma). + + + + bcc + + Opcional. Endereços de destinatários em cópia oculta + delimitados por vírgulas. O padrão é uma string vazia + (nenhuma). + + + + highPriority + + Opcional. Se verdadeiro, a mensagem é enviada com alta + prioridade. O padrão é false (prioridade normal) + diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachText.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachText.xml index 159ac1404df..ab59c19ddd7 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachText.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SendEmailAttachText.xml @@ -12,9 +12,9 @@ Email.SendEmailAttachText SendEmailAttachText - ( sendto, subject, body, attachment, - mimietype, filename, server, port, sender - ) + ( to, subject, body, attachment, + mimietype, filename, mailServer, port, sendercc, bcc, + highPriority ) @@ -24,7 +24,7 @@ - sendto + to Uma string terminada por nulo que contém uma lista delimitada por vírgulas dos endereços dos destinatários. A validade dos @@ -73,7 +73,7 @@ - server + mailServer Opcional. Uma string terminada por nulo que contém o nome do servidor de e-mail. Se omitida, assume o valor padrão da variável de @@ -95,6 +95,28 @@ do remetente. Se omitida, assume o valor padrão da variável de ambiente emailSenderAddress. + + + cc + + Opcional. Endereços de destinatários em cópia delimitados por + vírgulas. O padrão é uma string vazia (nenhuma). + + + + bcc + + Opcional. Endereços de destinatários em cópia oculta + delimitados por vírgulas. O padrão é uma string vazia + (nenhuma). + + + + highPriority + + Opcional. Se verdadeiro, a mensagem é enviada com alta + prioridade. O padrão é false (prioridade normal) + diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml index 4989ff36311..0932364130e 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml @@ -28,7 +28,11 @@ role="bold">] , [ dfuServerQueue ] , [ noSplit - ]) + ] , [ + noCommon ],[ + sourcePlane ],[ destinationNumParts ]) dfuwuid := STD.File.fSprayFixed @@ -53,9 +57,12 @@ role="bold">], [expireDays] , [ - dfuServerQueue ] , - [ - noSplit]) + noSplit] , [ noCommon ],[ sourcePlane ],[ + destinationNumParts ]) @@ -111,18 +118,20 @@ espserverIPport - Uma string terminada por nulo que contém o protocolo, o IP, a - porta e o diretório ou DNS equivalente do programa do servidor' ESP. - Normalmente são os mesmos IP e porta do ECL Watch, com "/FileSpray" - anexado. Se omitida, o padrão é o valor contido no atributo - lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. maxConnections - Opcional. Um inteiro que especifica o número máximo de - conexões. Se omitido, o padrão é um (1). + Opcional. Um inteiro especificando o número máximo de + conexões. Se omitido, o padrão é -1, o que indica que o sistema + escolhe um padrão adequado com base no tamanho do cluster. @@ -176,8 +185,34 @@ noSplit Opcional. Uma flag booleana TRUE ou FALSE indicando para não -           dividir uma parte do arquivo em várias partes de destino. - O padrão é           FALSO + dividir uma parte do arquivo em várias partes de destino. O padrão é + FALSO + + + + noCommon + + Opcional. Um sinalizador booleano True ou False para + "combinar" processos pull ou push no mesmo host. Defina como FALSE + para "comunizar" a operação no mesmo host. O padrão pode ser + definido na configuração. Use o + GetNoCommonDefault para recuperar a configuração padrão. O + valor desse parâmetro pode ter um impacto significativo no + desempenho. + + + + sourcePlane + + O nome da landing zone que contêm o arquivo + + + + destinationNumParts + + Substitua o número de partes a serem criadas ao fazer o + spray. O padrão é 0, o que significa que ele criará o mesmo número + de peças que o cluster de destino. diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayJson.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayJson.xml index 784157ae3bb..e81d1e22b1c 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayJson.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayJson.xml @@ -34,7 +34,13 @@ role="bold">] , [ dfuServerQueue] , [ - noSplit]) + noSplit]) + noSplit], [noCommon ],[ sourcePlane ],[ + destinationNumParts ]) dfuwuid := STD.File.fSprayJson @@ -66,7 +72,12 @@ role="bold">] , [ dfuServerQueue] , [ - noSplit]) + noSplit], [noCommon ],[ sourcePlane ],[ + destinationNumParts ]) @@ -137,18 +148,21 @@ espserverIPport - Opcional. Uma sequência terminada por nulo contendo o - protocolo IP, porta e diretório, ou o equivalente ao DNS, do - programa do servidor ESP. Geralmente, é o mesmo IP e porta que o ECL - Watch, com "/FileSpray" anexado. Se omitido, o padrão é o valor - contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. maxConnections - Opcional. Um número inteiro especificando o número máximo de - conexões. Se omitido, o padrão é um (1). + Optional. An integer specifying the maximum number of + connections. If omitted, the default is -1, which indicates the + system chooses a suitable default based on the size of the + cluster. @@ -208,6 +222,32 @@ FALSE. + + noCommon + + Opcional. Um sinalizador booleano TRUE ou FALSE para + "combinar" processos pull ou push no mesmo host. Defina como FALSE + para "comunizar" a operação no mesmo host. O padrão pode ser + definido na configuração. Use + GetNoCommonDefault para recuperar a configuração padrão. O + valor desse parâmetro pode ter um impacto significativo no + desempenho. + + + + sourcePlane + + The name of the landing zone containing the file + + + + destinationNumParts + + Override the number of parts to be created when spraying. The + default is 0 which means it will create the same number of parts as + the target cluster. + + dfuwuid diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml index 84b0732bfbd..5619a3c282e 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml @@ -44,7 +44,12 @@ [ dfuServerQueue] , [ - noSplit]) + noSplit] , [noCommon ],[ sourcePlane ],[ + destinationNumParts ]) dfuwuid := STD.File.fSprayDelimited @@ -85,7 +90,12 @@ role="bold">] , [ dfuServerQueue] , [ - noSplit]) + noSplit] , [noCommon ],[ sourcePlane ],[ + destinationNumParts ]) @@ -164,18 +174,20 @@ espserverIPport - Opcional. Uma string terminada por nulo que contém o - protocolo, o IP, a porta e o diretório ou DNS equivalente do - programa do servidor' ESP. Normalmente são os mesmos IP e porta do - ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor - no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. maxConnections - Opcional. Um inteiro que especifica o número máximo de - conexões. Se omitido, o padrão é um (1). + Opcional. Um inteiro especificando o número máximo de + conexões. Se omitido, o padrão é -1, que indica o sistema escolhe um + padrão adequado com base no tamanho do cluster. @@ -266,6 +278,32 @@ primeiro na fila de DFU no ambiente. + + noCommon + + Opcional. Uma flag booleana VERDADEIRO ou FALSO para + "combinar" processos pull ou push no mesmo host. Defina como FALSE + para "comunizar" a operação no mesmo host. O padrão pode ser + definido na configuração. Use GetNoCommonDefault para + recuperar a configuração padrão. O valor desse parâmetro pode ter um + impacto significativo no desempenho. + + + + sourcePlane + + O nome da Landing Zone que contêm o arquivo + + + + destinationNumParts + + Substitua o número de peças a serem criadas ao fazer o spray. + O padrão é 0, o que significa que ele criará o mesmo número de peças + que o cluster de destino. + + dfuwuid diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml index 1df1dc794eb..07111042f01 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml @@ -34,7 +34,12 @@ role="bold">] , [ dfuServerQueue] , [ - noSplit]) + noSplit], [noCommon ],[ sourcePlane ],[ + destinationNumParts ]) dfuwuid := STD.File.fSprayXML @@ -66,7 +71,12 @@ role="bold">] , [ dfuServerQueue] , [ - noSplit]) + noSplit], [noCommon ],[ sourcePlane ],[ + destinationNumParts ]) @@ -136,18 +146,20 @@ espserverIPport - Opcional. Uma string terminada por nulo que contém o - protocolo, o IP, a porta e o diretório ou DNS equivalente do - programa do servidor' ESP. Normalmente são os mesmos IP e porta do - ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor - contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. maxConnections - Opcional. Um inteiro que especifica o número máximo de - conexões. Se omitido, o padrão é um (1). + Opcional. Um inteiro especificando o número máximo de + conexões. Se omitido, o padrão é -1, que indica o sistema escolhe um + padrão adequado com base no tamanho do cluster. @@ -205,6 +217,32 @@ O padrão é           FALSO + + noCommon + + Opcional. Uma flag booleana VERDADEIRO ou FALSO para + "combinar" processos pull ou push no mesmo host. Defina como FALSE + para "comunizar" a operação no mesmo host. O padrão pode ser + definido na configuração. Use GetNoCommonDefault para + recuperar a configuração padrão. O valor desse parâmetro pode ter um + impacto significativo no desempenho. + + + + sourcePlane + + O nome da Landing Zone que contêm o arquivo + + + + destinationNumParts + + Substitua o número de peças a serem criadas ao fazer o spray. + O padrão é 0, o que significa que ele criará o mesmo número de peças + que o cluster de destino. + + dfuwuid diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/WaitDfuWorkunit.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/WaitDfuWorkunit.xml index 4ad6e3b7662..58dce65784c 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/WaitDfuWorkunit.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/WaitDfuWorkunit.xml @@ -1,4 +1,4 @@ - + @@ -17,39 +17,55 @@ - + - + dfuwuid - Uma string terminada por nulo que contém o ID da workunit DFU (DFUWUID) do job a ser abortado. Esse valor é retornado pelas versões das funções Copy, SprayFixed, SprayVariable, SprayXML e Despray FileServices "com nome começando por f". + Uma string terminada por nulo que contém o ID da workunit DFU + (DFUWUID) do job a ser abortado. Esse valor é retornado pelas + versões das funções Copy, SprayFixed, SprayVariable, SprayXML e + Despray FileServices "com nome começando por f". timeout - Opcional. Um valor inteiro que indica a configuração de tempo limite. Se omitido, o padrão é -1. Se definido como (0), o controle da execução retorna imediatamente à workunit ECL sem esperar a conclusão da workunit DFU. + Opcional. Um valor inteiro que indica a configuração de tempo + limite. Se omitido, o padrão é -1. Se definido como (0), o controle + da execução retorna imediatamente à workunit ECL sem esperar a + conclusão da workunit DFU. espserverIPport - Opcional. Uma string terminada por nulo que contém o protocolo, o IP, a porta e o diretório ou DNS equivalente do programa do servidor ESP. Normalmente são os mesmos IP e porta do ECL Watch, com "/FileSpray" anexado. Se omitida, o padrão é o valor contido no atributo lib_system.ws_fs_server. + Opcional. Isso quase sempre deve ser omitido, o que, por + padrão, é o valor contido no atributo lib_system.ws_fs_server. + Quando não omitido, deve ser uma string terminada em nulo contendo o + protocolo, IP, porta e diretório, ou o DNS equivalente, do programa + do servidor ESP. Geralmente, é o mesmo IP e porta do ECL Watch, com + "/FileSpray" anexado. Return: - WaitDfuWorkunit retorna uma string terminada por nulo que contém a string de status final da Workunit DFU (como: scheduled, queued, started, aborted, failed, finished, or monitoring). + WaitDfuWorkunit retorna uma string terminada por nulo que + contém a string de status final da Workunit DFU (como: scheduled, + queued, started, aborted, failed, finished, or monitoring). - A função WaitDfuWorkunit aguarda a conclusão da workunit DFU especificada. Normalmente, essa workunit foi iniciada com o parâmetro timeout definido como zero(0). + A função WaitDfuWorkunit aguarda a + conclusão da workunit DFU especificada. Normalmente, essa workunit foi + iniciada com o parâmetro timeout definido como + zero(0). Exemplo: diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/dbglog.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/dbglog.xml index 2a7a7a9f206..4d571ef0704 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/dbglog.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/dbglog.xml @@ -40,6 +40,12 @@ A ação dbglog grava a string de text no arquivo eclagent.log da tarefa. + Em uma implantação de plataforma em contêiner, essa ação grava a + string de texto no log do pod eclagent, acessível + usando este comando: + + kubectl logs <podname> + Exemplo: IMPORT STD; diff --git a/docs/PT_BR/ECLStandardLibraryReference/SLR-includer.xml b/docs/PT_BR/ECLStandardLibraryReference/SLR-includer.xml index 7b3ae97b28b..631f541f9be 100644 --- a/docs/PT_BR/ECLStandardLibraryReference/SLR-includer.xml +++ b/docs/PT_BR/ECLStandardLibraryReference/SLR-includer.xml @@ -63,7 +63,9 @@ - <emphasis>Arquivos lógicos</emphasis> + + <emphasis>Arquivos lógicos</emphasis> + @@ -71,6 +73,9 @@ + + diff --git a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml index 28cf87236b2..e886ed47f0d 100644 --- a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml +++ b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml @@ -213,6 +213,14 @@ padrão é 25. + + nocommon + + Opcional. Um sinalizador booleano (0 | 1, padrão=1). + Defina como 0 para habilitar a "comunização" de processos + pull ou push no mesmo host. + + throttle @@ -639,8 +647,8 @@ dfuplus action=spray srcplane=lzstorageplane Opcional. O endereço IP do nó do servidor. Se omitido, as informações devem ser fornecidas pelo parâmetro - dstxml ou pelo parâmetro - dstplane . + dstxml. Obsoleto, você deve usar + dstplane em seu lugar. @@ -648,7 +656,9 @@ dfuplus action=spray srcplane=lzstorageplane Opcional. O plano de armazenamento do destino. Observação: dstplane não deve ser usado - ao mesmo tempo que dstip. + ao mesmo tempo que dstip. Em uma + implantação em contêiner, o dstplane é + necessário se você tiver mais de uma landinz zone. @@ -1232,16 +1242,38 @@ dfuplus action=add srcxml=exportedMysuper.xml dstname=Mysuper - wuid - + + + + wuid + + + O identificador de uma workunit + + + + + + limit + + + + + Para workunits do publicador, isso limita o + número de workunit filhas a serem listadas. Se definido + como 0, somente o status pai será retornado. O padrão é + 1000. + Exemplo: - dfuplus action=status wuid=W20050309-093020 + dfuplus action=status wuid=D20220816-135243 +dfuplus action=status limit=300 wuid=P20230301-123456 +dfuplus action=status limit=0 wuid=P20230301-987654 diff --git a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml index f8e052f8a27..2feab2c86f5 100644 --- a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml +++ b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml @@ -3,26 +3,26 @@ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> - ECL CLI do Componente de Ferramentas do Cliente + Client Tools Component ECL CLI Boca Raton - Equipe de documentação + Documentation Team Lexis Nexis - Novembro de 2011 + Nov. 2011 - <emphasis role="bold">Interface de Comando</emphasis> + Interface de linhas de Comando ECL - Sintaxe de Comandos ECL + A sintaxe do comando ECL <emphasis role="bold">ecl [</emphasis>--version<emphasis @@ -30,8 +30,6 @@ role="bold">[</emphasis><options><emphasis role="bold">]</emphasis> - - @@ -40,13 +38,13 @@ - --version + --versione - exibe informações de versão. + exibe informações sobre a versão. - Argumentos + Arguments @@ -54,34 +52,34 @@ deploy - Cria uma workunit a partir de um arquivo ECL, arquivo - ou dll + Cria uma workunit a partir de um arquivo, ou arquivo + ecl, ou dll publish - Adiciona uma workunit a um Grupo de Consultas + Adiciona uma workunit ao queryset unpublish - Remove uma consulta de um grupo de consultas + Remover uma consulta de um conjunto run - Executa o arquivo ecl, arquivo, dll, wuid, ou - consulta + Execute o arquivo ecl, arquivo, dll, wuid ou consulta + fornecidos results - Retorna o resultado completo de uma WUID em formato XML - . + retorna os resultados completos de um determinado WUID + no formato XML. @@ -93,84 +91,101 @@ deactivate - Desativa o nome do alias da consulta + Desativa o nome de alias da consulta fornecida queries - Lista ou manipula consultas ou grupo de + Lista ou manipula consultas e conjuntos de consultas - roxie + packagemap - Executa comandos para o Roxie + Executa o comando packagemap (para Roxie) - packagemap + bundle - Executa comandos do packagemap (para o Roxie) + gerencia pacotes ECL - bundle + roxie - Gerencia pacotes ECL + executa comandos para a Roxie abort - Aborta uma ou mais workunits de uma WUID ou nome da - tarefa + aborta um ou mais workunits da WUID ou do job status - Retorna o status de uma workunit ou de um nome do job. - Se for encontrado mais de um nome, será fornecido uma - lista. + retorna o status de uma determinada workunit ou job. Se + mais de um for encontrado, uma lista será retornada. getname - Retorna o nome da workunit de uma determinada - WUID. + retorna o nome da workunit da WUID. getwuid - Retorna a(s) WUID(s) do job de uma determinad - workunit. + retorna o(s) WUID(s) do job da workunit + fornecida. + + + + zapgen + + gere e baixe o arquivo zap para o WUID + fornecido. + + + + sign + + adiciona uma assinatura digital a um arquivo ecl ou + texto. + + + + listkeyuid + + retorna uma lista de todos os IDs de usuário-chave que + podem ser usados pelo comando sign. - - ecl.ini - Várias opções podem ser colocadas em um arquivo denominado + Muitas opções podem ser colocadas em um arquivo chamado ecl.ini no mesmo diretório do - executável. As opções que raramente são alteradas devem ser - colocadas em um arquivo ini. Por exemplo: + executável. As opções que não mudam com muita frequência devem ser + colocadas no arquivo ini. Por exemplo: - eclWatchIP=10.150.50.12 + ;The values below are examples, you should change them to match your platform deployment +eclWatchIP=10.150.50.12 eclWatchPort=28010 eclUserName=emilykate -eclPassword=elmo812 +eclPassword= resultLimit=200 - Em alguns exemplos abaixo, vamos supor que ecl.ini possui o + Em alguns exemplos abaixo, assumiremos que ecl.ini tem o conteúdo acima. @@ -184,46 +199,49 @@ resultLimit=200 - Não recomendamos armazenar sua senha no arquivo ini - (que não é criptografado). A senha está incluída no - arquivo ini nesses exemplos para simplificar o código de + Não recomendamos armazenar sua senha no arquivo INI + ou na variável de ambiente (que é um texto não + criptografado). A senha está incluída no arquivo INI + desses exemplos para simplificar o código de exemplo. - As opções a seguir podem ser fornecidas em um arquivo ini: + As seguintes opções podem ser fornecidas em um arquivo ini: eclWatchIP, eclWatchPort, eclUserName, eclPassword, activateDefault, waitTimeout, resultLimit. - A análise das opções seguem a seguinte ordem de - precedência: + A avaliação das opções segue esta ordem de precedência: - Linha de comando + linha de comando - Arquivo ini + arquivo ini - Variável do ambiente + variável de ambiente - Valor padrão + valor padrão + + Se um nome de usuário for fornecido por qualquer método e uma + senha não for, você será solicitado a fornecer a senha. - - Variável do ambiente + + Variáveis de Ambiente - Algumas opções podem ser armazenadas nas variáveis do ambiente - em seu computador. Há suporte para as seguintes opções: + Algumas opções podem ser armazenadas em Variáveis de Ambiente + em sua máquina. As seguintes opções são suportadas: ECL_WATCH_IP ECL_WATCH_PORT @@ -247,9 +265,8 @@ ECLCC_PATH - Não recomendamos armazenar senhas em uma variável - do ambiente, a menos que seu sistema esteja - protegido. + Não recomendamos armazenar senhas nas Variáveis de + Ambiente. @@ -257,31 +274,197 @@ ECLCC_PATH + + Suporte ao Git + + HPCC Systems integrates native support for leveraging + Git. + + A opção --main foi estendida para suportar + a compilação de uma consulta diretamente de um repositório Git. Quando + invocado, ele recupera o código ECL especificado do repositório Git, + compila o código e executa a consulta. O check-out é feito no + ECLCCServer remoto e não na máquina cliente. + + + Sintaxe + + A sintaxe referência o local do repositório: + + <protocol:>//<urn>/<user>/<repository>#version + + O componente #version pode ser o nome de + uma branch, tag ou o SHA (Secure Hash + Algorithm) de um commit. + + Por exemplo: + + ecl run thor --main demo.main@gituser/gch-ecldemo-d#version1 --server=... + + + Este exemplo executa o código ECL + demo.main na branch + version1 do repositório gituser + gch-ecldemo-d + + Esse recurso é suportado pelas ferramentas de linha de comando + ecl e eclcc. + + + + Exemplos Adicionais + + Os exemplos a seguir compilam o atributo + demo.main da branch + version3 do repositório GitHub + gituser/gch-ecldemo-d: + + eclcc --main demo.main@gituser/gch-ecldemo-d#version3 +eclcc --main demo.main@gituser/gch-ecldemo-d --mainrepoversion=version3 +eclcc --main demo.main@gituser/gch-ecldemo-d --defaultrepoversion=version3 +eclcc --main demo.main#version3 --defaultrepo=gituser/gch-ecldemo-d +eclcc --main demo.main --defaultrepo=gituser/gch-ecldemo-d --defaultrepoversion=version3 + + Se você estiver enviando um arquivo de origem query.ecl e + quiser substituir a definição de demo.main pelo mesmo repositório, o + seguinte funcionará: + + eclcc query.ecl --main demo.main@gituser/gch-ecldemo-d#version3 +eclcc query.ecl --main demo.main@gituser/gch-ecldemo-d --mainrepoversion=version3 +eclcc query.ecl --main "demo.main#version3" --mainrepo=gituser/gch-ecldemo-d +eclcc query.ecl --main demo.main --defaultrepo=gituser/gch-ecldemo-d --defaultrepoversion=version3 + + + + Suporte a Mútiplos Repositórios + + As consultas podem ser compiladas de vários repositórios Git. + Cada repositório Git é tratado como um pacote independente separado. + As dependências entre os repositórios são especificadas em um + arquivo de pacote que é verificado no repositório e controlado junto + com o código ECL. O arquivo do pacote indica quais são as + dependências e quais versões devem ser usadas. + + package.json: +{ + "name": "demoRepoC", + "version": "1.0.0", + "dependencies": { + "demoRepoD": "gituser/gch-ecldemo-d#version1" + } +} + + No exemplo acima, o arquivo de pacote o nomeia e define as + dependências.. + + A propriedade dependencies é uma lista de pares chave-valor. A + chave fornece o nome do módulo ECL que é usado para acessar o + repositório externo. O valor é uma referência de repositório usando + a mesma sintaxe descrita na seção anterior. + + + Repositórios Externos no ECL + + Para usar definições de um repositório externo, você + adicionaria uma definição de importação ao seu código ECL. + + Por exemplo considere o seguinte código ECL: + + IMPORT layout; +IMPORT demoRepoD AS demoD; +EXPORT personAsText(layout.person input) := + input.name + ': ' + demoD.format.maskPassword(input.password); + + O nome demoRepoD em segundo corresponde ao valor da chave no + arquivo package.json. + + Este código usa o atributo + format.maskPassword do repositório + gituser/gch-ecldemo-d. + + Cada pacote é processado independentemente de qualquer + outro. A única conexão é por meio de importações explícitas dos + pacotes externos. Isso significa que os pacotes podem ter módulos + ou atributos com o mesmo nome e eles não entrarão em + conflito. + + + + + O NPM + + Você pode usar o NPM (node package manager) para garantir que + rótulos ou ramificações sejam vinculados a um SHA específico. + + Por exemplo: + + npm install --package-lock-only + + Este comando cria um arquivo + package-lock.json no mesmo local que + package.json. O programa npm então resolve as referências às + ramificações e as resolve para os SHAs correspondentes. O uso da + opção --package-lock-only indica que o npm não deve clonar as + versões associadas do código aos diretórios node_modules. + + O arquivo package-lock.json gerado conterá algo similar ao + seguinte: + + { + "packages": { + "node_modules/demoRepoD": { + "resolved": "https://github.com/gituser/gch-ecldemo-d.git#644c1f4dd80ca1e8f05974983455a244e5", + } + } +} + + Se um arquivo package-lock.json estiver presente, ele terá + precedência sobre o arquivo package.json. A ECL é compilada da mesma + forma, com o ECLCC Server baixando automaticamente as + dependências. + + A vantagem de usar package-lock.json sobre package.json é que + ele permite que você use a sintaxe de versão semântica do npm + (#semver). Ele também permite que você use uma ramificação em seu + arquivo package.json como uma dependência lógica, mas resolvida para + uma dependência real ou um SHA específico. Dessa forma, se a + ramificação for atualizada, a consulta não será alterada. + + Você também pode usar o npm sem a opção --package-lock-only. + Isso verificará a versão apropriada do código no subdiretório + node_modules do projeto atual. O servidor ECLCC suporta a estrutura + node_module como uma forma de fornecer a fonte para pacotes + externos. Esta é uma forma alternativa de compilar o código usando + eclcc de forma totalmente independente do sistema de controle de + origem. + + + ecl deploy ecl deploy <target> <file> - [--name=<value>] + [--job-name=<value>] ecl deploy <target> <archive> - [--name=<value>] + [--job-name=<value>] ecl deploy <target> <so | dll - > [--name=<value>] + > [--job-name=<value>] ecl deploy <target> - - [--name=<val>] + [--job-name=<val>] Exemplos: - ecl deploy roxie findperson.ecl --name=FindPersonService -ecl deploy roxie ArchiveQuery.xml --name=FindPersonService -ecl deploy roxie libW20150914-125557.so --name=FindPersonService -ecl deploy roxie - --name=FindPersonService + ecl deploy roxie findperson.ecl --job-name=FindPersonService +ecl deploy roxie ArchiveQuery.xml --job-name=FindPersonService +ecl deploy roxie libW20150914-125557.so --job-name=FindPersonService +ecl deploy roxie - --job-name=FindPersonService - Um hífen (-) especifica que o objeto deve ser lido a partir do - stdin. + Um hifém (-) especifica que o objeto deve ser lido de + stdin @@ -293,10 +476,10 @@ ecl deploy roxie - --name=FindPersonService ecl deploy - Cria uma workunit no HPCC System para um determinado - texto ECL, arquivo ECL, arquivo, objeto compartilhado, - ou dll. A workunit é criada na - compilação . + Cria uma workunit na plataforma HPCC Systems a partir + de determinado texto ECL, arquivo, objeto compartilhado ou + dll. A workunit é criada no estado + compilado @@ -306,33 +489,32 @@ ecl deploy roxie - --name=FindPersonService target - O cluster de destino para o qual será feita a - implementação + O cluster de destino no qual implantar file - O arquivo de texto ECL a ser implementado + O arquivo de texto ECL a ser implantado archive - O arquivo ECL a ser implementado + O arquivo ECL a ser implantado so | dll - A biblioteca de vínculo dinâmico da workunit ou - objeto compartilhado a ser implementado + A biblioteca vinculada dinâmica da workunit ou objeto + compartilhado para implantar - - Especifica que o objeto deve ser lido a partir de + Especifica que o objeto deve ser lido do stdin @@ -341,7 +523,7 @@ ecl deploy roxie - --name=FindPersonService - -n, --name + --job-name O nome da consulta publicada @@ -349,110 +531,237 @@ ecl deploy roxie - --name=FindPersonService --protect - Protege a workunit da exclusão + Proteger a workunit contra exclusão - -v, --verbose + Opções ECL - Saída de informações adicionais de - rastreamento + - -s, --server + --main=<definition> - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Essa opção permite compilar consultas de árvores ou + repositórios de origem existentes. Ele pode ser usado para + especificar repositórios e versões padrão a serem usados. + Consulte a seção "Git + Support" para uso específico. - --port + --snapshot, -sn=<label> - A porta dos serviços do ECL Watch (o padrão é - 8010) + Rótulo do Snapshot a ser usado de um repositório ECL + herdado - -ssl + --ecl-only - Use o protocolo SSL para proteger a conexão com o - servidor. + Envie a consulta ECL para o cluster HPCC Systems como + texto, em vez de coletar dependências e criar um + arquivo - -u, --username + --limit=<limit> - O nome do usuário (se necessário) + Define o limite de resultados para a consulta - -pw, --password + -f<option>[=value] - A senha (se necessário) + Defina uma opção ECL (equivalente a #option) - --main + -f-<option>[=value] - A definição a ser usada a partir de um repositório - ECL antigo + Defina uma opção de linha de comando eclcc com o + traço único ('-') - --ecl-only + -f--<option>[=value] + + Defina uma opção de linha de comando eclcc com o + traço duplo ('--') + - Envia a consulta ECL para o HPCC como texto em vez de - um arquivo gerado + + -Dname=value + + Substituir a definição de um atributo global + 'name' - Opções ECCLC + Opções eclcc - -Ipath + -I <path> - Adiciona um caminho aos locais para procurar por + Adicionar caminho aos locais para pesquisar importações ecl - -Lpath + -L <path> - Adiciona um caminho aos locais para procurar por + Adicionar caminho aos locais para pesquisar bibliotecas do sistema --manifest - Especifica o caminho para manifestar o - arquivo + Especifique o caminho para o arquivo de + manifesto + + + + -g, --debug + + Habilitar símbolos de depuração no código + gerado -checkDirty - Faz com que o eclcc gere um aviso para qualquer - atributo que tenha sido modificado (conforme o resultado do - status git) O uso dessa função exige que o git esteja - instalado e disponível no caminho. + Esta opção relata quaisquer atributos modificados + usando git status - --nostdinc + --fetchrepos - Não inclua o diretório atual em -I + Esta opção baixa automaticamente todos os + repositórios ausentes associados às dependências - --fastsyntax + -R<repo>[#version]=<path> + + Esta opção resolve referências de repositório + especificadas no diretório <path> + + + + --updaterepos + + Definir esta opção atualiza automaticamente os + repositórios associados às dependências + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido + + + + -v, --verbose + + Saída de informações adicionais de + rastreamento + + + + -s, --server=<ip> + + O endereço IP ou nome do host do servidor ESP + executando serviços ECL + + + + --port=<port> + + A porta de serviços ECL (o padrão é 8010) + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert - Atrasar funções de expansão ao analisar. Pode - acelerar processamento para algumas consultas + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL + + + + -pw, --password + + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. + + + + --wait-connect=<Ms> + + Tempo limite ao conectar ao servidor (em + milissegundos) + + + + --wait-read=<Secs> + + Tempo limite durante a leitura do soquete (em + segundos) @@ -463,47 +772,50 @@ ecl deploy roxie - --name=FindPersonService ecl publish ecl publish <target> <file> - [--name=<val>] + [--query-name=<val>] + + ecl publish <target> <file> + [--query-name=<val>] [--job-name=<val>] ecl publish <target> <wuid> - [--name=<val>] + [--query-name=<val>] ecl publish <target> <so | - dll> [--name=<val>] + dll> [--query-name=<val>] ecl publish <target> <archive> - [--name=<val>] + [--query-name=<val>] ecl publish <target> - - [--name=<val>] + [--query-name=<val>] Exemplos: - ecl publish roxie findperson.ecl --name=FindPersonService -A -ecl publish roxie W20150914-125557 --name=FindPersonService -A -ecl publish roxie libW20150914-125557.so --name=FindPersonService -A -ecl publish roxie ArchiveQuery.xml --name=FindPersonService -A -ecl publish roxie - --name=FindPersonService --activate -ecl publish roxie findperson.ecl --name=FindPersonService --no-activate -ecl publish roxie ArchiveQuery.xml --name=FindPersonService --no-activate + ecl publish roxie findperson.ecl --query-name=FindPersonService -A +ecl publish roxie W20150914-125557 --query-name=FindPersonService -A +ecl publish roxie libW20150914-125557.so --query-name=FindPersonService -A +ecl publish roxie ArchiveQuery.xml --query-name=FindPersonService -A +ecl publish roxie - --query-name=FindPersonService --activate +ecl publish roxie findperson.ecl --query-name=FindPersonService --no-activate +ecl publish roxie ArchiveQuery.xml --query-name=FindPersonService --no-activate - Um hífen (-) especifica que o objeto deve ser lido a partir do + Um hífen (-) especifica que o objeto deve ser lido de stdin. - + - + ecl publish - Publica uma consulta em um grupo de consultas. A - consulta é criada ao adicionar a tarefa em um grupo de - consultas e ao atribuir um nome de consulta. + Publica uma consulta em um queryset. A consulta é + criada adicionando uma workunit a um queryset e atribuindo a + ela um nome de consulta. @@ -513,14 +825,14 @@ ecl publish roxie ArchiveQuery.xml --name=FindPersonService --no-activate target - O cluster de destino para o qual será feita a - publicação + O cluster de destino no qual publicar wuid - A ID da workunit a ser publicada + A ID da workunit a ser publicada (WUID diferencia + maiúsculas de minúsculas) @@ -532,31 +844,41 @@ ecl publish roxie ArchiveQuery.xml --name=FindPersonService --no-activate archive - O arquivo ECL a ser publicado + O arquivo ECL a publicar so | dll - A biblioteca de vínculo dinâmico da workunit ou - objeto compartilhado a ser publicado + A biblioteca vinculada dinâmica da workunit ou objeto + compartilhado para publicar - - Especifica que o objeto deve ser lido a partir de + Especifica que o objeto deve ser lido do stdin Opções + + - -n, --name + --query-name - O nome da consulta publicada + O nome da consulta a ser usado para a workunit + publicada + + + + --job-name + + O nome do trabalho a ser usado para a + workunit @@ -574,278 +896,339 @@ ecl publish roxie ArchiveQuery.xml --name=FindPersonService --no-activate -sp, --suspend-prev - Suspende a consulta previamente ativa + Suspender consulta ativa anteriormente -dp, --delete-prev - Remove a consulta previamente ativa + Excluir consulta ativa anteriormente + + + + --protect + + Protege a workunit especificada contra + exclusão. --no-files - Especifica que as informações do arquivo DFS não - devem ser copiadas para os arquivos referenciados pela - consulta + Especifica para não copiar as informações do arquivo + DFS para arquivos referenciados pela consulta --no-reload - Especifica que um novo carregamento do cluster Roxie - não deve ser solicitado + Especifica para não solicitar um recarregamento do + cluster Roxie --allow-foreign - Especifica a permissão do uso de arquivos remotos em - uma consulta Roxie. Se uma consulta Roxie fizer referência a - arquivos remotos e se essa permissão não for ativada, a + Especifica para permitir o uso de arquivos externos + em uma consulta Roxie. Se uma consulta Roxie fizer + referência a arquivos externos e isso não estiver ativado, a publicação falhará. - --daliip= + --daliip=<IP> + + Especifica para permitir o uso de arquivos externos + em uma consulta Roxie. Se uma consulta Roxie fizer + referência a arquivos externos e isso não estiver ativado, a + publicação falhará. + + + + -O, --overwrite - Endereço IP ou nome do host do Dali Remoto a ser - usado na pesquisa de arquivos lógicos. + Substitui completamente as informações do arquivo DFS + existente. Esta opção é perigosa - use apenas como último + recurso. - --update-dfs + --update-super-files - Atualiza os superarquivos DFS locais se o Dali remoto - tiver sido alterado + Atualize os superarquivos DFS locais se o DALI remoto + for alterado + + + + --update-clone-from + + Atualize o clone local a partir do local se o DALI + remoto tiver mudado + + + + --dont-append-cluster + + Emita esta opção apenas para evitar problemas de + bloqueio devido à adição de um cluster ao arquivo ---source-process - Cluster de processo da qual os arquivos serão - copiados. + Cluster de processo do qual copiar arquivos --timeLimit=<sec> - Valor a ser definido para configuração do tempo - limite da consulta + Valor a ser definido para a configuração do timeLimit + da consulta --warnTimeLimit=<sec> - Valor a ser definido para a configuração do aviso de - tempo limite da consulta + Valor a ser definido para a configuração do + warningTimeLimit da consulta --memoryLimit=<mem> - Valor a ser definido para configuração do limite de - memória da consulta. Formatar <mem> como 500000B, - 550K, 100M, 10G, ou 1T, etc. + Valor a ser definido para a configuração do + memoryLimit da consulta. Formata <mem> como 500000B, + 550K, 100M, 10G ou 1T, etc. --priority=<val> - Define a prioridade desta consulta. O valor pode ser - LOW, HIGH, SLA, NONE. A opção NONE apagará a configuração + A prioridade para esta consulta. O valor pode ser + LOW, HIGH, SLA, NONE. NONE limpará a configuração atual. --comment=<string> - Um comentário associado à esta consulta + Um comentário associado a esta consulta --wait=<sec> - O tempo máximo restante para a conclusão da - atualização do cluster + Tempo máximo de espera pela conclusão da atualização + do cluster - -v, --verbose + Opções DFU - Saída de informações adicionais de - rastreamento + - -s, --server + --dfu-copy - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano - --port + --init-publisher-wuid - A porta dos serviços do ECL Watch (o padrão é - 8010) + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando - -ssl + --dfu-queue - Use o protocolo SSL para proteger a conexão com o - servidor. + A Fila DFU a ser usada ao fazer uma cópia DFU - -u, --username + --dfu-wait - O nome do usuário (se necessário) + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) - -pw, --password + --dfu-overwrite - A senha (se necessário) + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. - --main + --only-copy-files - A definição a ser usada a partir de um repositório - ECL antigo + Copie os arquivos necessários para a consulta, mas + não publique a consulta - --ecl-only + --stop-if-files-copied - Envia a consulta ECL para o HPCC como texto em vez de - um arquivo gerado + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta - --limit=<limit> + Opções ECL - Define o limite do resultado da consulta. O padrão é - 100. + - -f<option>[=value] + --main=<definition> - Define uma opção ECL (equivalente a #option) + Essa opção permite compilar consultas de árvores ou + repositórios de origem existentes. Ele pode ser usado para + especificar repositórios e versões padrão a serem usados. + Consulte a seção "Git + Support" para uso específico. - -Dname=value + --snapshot, -sn=<label> - Substitui a definição do “nome” global do - atributo + Rótulo do Snapshot a ser usado de um repositório ECL + herdado - Opções ECCLC + --ecl-only - + Envie a consulta ECL para o cluster HPCC Systems como + texto em vez de como um arquivo gerado - -Ipath + --limit=<limit> - Adiciona um caminho aos locais para procurar por - importações ecl + Define o limite de resultados para a consulta - -Lpath + -f<option>[=value] - Adiciona um caminho aos locais para procurar por - bibliotecas do sistema + Defina uma opção ECL (equivalente a #option) - --manifest + -f-<option>[=value] - Especifica o caminho para manifestar o - arquivo + Defina uma opção de linha de comando eclcc com o + traço único ('-') - -checkDirty + -f--<option>[=value] - Faz com que o eclcc gere um aviso para qualquer - atributo que tenha sido modificado (conforme o resultado do - status git) O uso dessa função exige que o git esteja - instalado e disponível no caminho. + Defina uma opção de linha de comando eclcc com o + traço duplo ('--') - --nostdinc + -Dname=value - Não inclua o diretório atual em -I + Substituir a definição de um atributo global + 'name' - --fastsyntax + Opções eclcc - Atrasar funções de expansão ao analisar. Pode - acelerar processamento para algumas consultas + - - - - - - - ecl unpublish - Executa o comando ECL não publicado - fornecido + + -I <path> - Exemplo: + Adicionar caminho aos locais para pesquisar + importações ecl + - ecl unpublish roxie FindpersonService.1 -ecl unpublish roxie "FindpersonService*" - + + -L <path> - + Adicionar caminho aos locais para pesquisar + bibliotecas do sistema + - - - + + --manifest - + Especifique o caminho para o arquivo de + manifesto + - - ecl unpublish + -g, --debug - Executa o comando ECL não publicado fornecido + Habilitar símbolos de depuração no código + gerado - Argumentos + -checkDirty + + Esta opção relata quaisquer atributos modificados + usando git status - queryset + --fetchrepos - O nome do grupo de consultas que contém a consulta - que não será publicada + Esta opção baixa automaticamente todos os + repositórios ausentes associados às dependências - query_id + -R<repo>[#version]=<path> - A consulta que será removida do grupo de consultas. - Elementos curinga são permitidos, mas devem estar entre - aspas (p.ex., "MyQuery*" ). + Esta opção resolve referências de repositório + especificadas no diretório <path> - Opções + --updaterepos + + Definir esta opção atualiza automaticamente os + repositórios associados às dependências + + + + --nostdinc + + Não inclua o diretório atual em -I + + + + --fastsyntax + + Atrasar as funções de expansão ao analisar. Pode + acelerar o processamento de algumas consultas + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido @@ -858,47 +1241,252 @@ ecl unpublish roxie "FindpersonService*" -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL + + + + -pw, --password + + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. + + + + --wait-connect=<Ms> + + Tempo limite ao conectar ao servidor (em + milissegundos) + + + + --wait-read=<Secs> + + Tempo limite durante a leitura do soquete (em + segundos) + + + + + + + + ecl unpublish + + ecl unpublish <target> + <query_id> + + Exemplo: + + ecl unpublish roxie FindpersonService.1 +ecl unpublish roxie "FindpersonService*" + + + + + + + + + + + + + ecl unpublish + + executa o comando ecl unpublish fornecido + + + + Opções + + + + + + <target> + + O nome do queryset de destino que contém a consulta a + ser removida + + + + <query_id> + + A consulta a ser removida do conjunto de consultas. + Caracteres curinga são permitidos, mas devem estar entre + aspas (por exemplo, "MyQuery*" ). + + + + --activated=yes|no + + Cancela a publicação das consultas suspensas pelo + usuário quando <query_id> for '*'. Especifique sim + para cancelar a publicação de consultas ativadas ou não para + cancelar a publicação de consultas desativadas. Quando o + <query_id> é '*'. Padrão para todas as + consultas. + + + + --suspended-by-user + + Cancela a publicação das consultas suspensas pelo + usuário quando <query_id> for '*'. + + + + --delete-workunit + + Exclua a workunit para <query_id>. Padrão para + No. + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido + + + + -v, --verbose + + Saída de informações adicionais de + rastreamento + + + + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. - -u, --username + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -910,7 +1498,7 @@ ecl unpublish roxie "FindpersonService*" ecl run ecl run <target> <file> - [--name=<val>] [--input=<file|xml>] [--wait=<i>] + [--job-name=<val>] [--input=<file|xml>] [--wait=<i>] ecl run <target> <wuid> @@ -920,19 +1508,19 @@ ecl unpublish roxie "FindpersonService*" [--input=<file|xml>][--wait=<ms>] ecl run <target> <so | dll> - [--name=<val>][--input=<file|xml>][--wait=<i>] + [--job-name=<val>][--input=<file|xml>][--wait=<i>] ecl run <target> <archive> - --name=<val> + --job-name=<val> [--input=<file|xml>][--wait=<i>] ecl run <target> - - --name=<val> + --job-name=<val> [--input=<file|xml>][--wait=<i>] Exemplos: - ecl run thor findperson.ecl --name=findperson --input=data.xml --wait=1000 + ecl run thor findperson.ecl --job-name=findperson --input=data.xml --wait=1000 ecl run thor W20150914-125557 --input=data.xml --wait=1000 ecl run thor findperson --input=data.xml --wait=1000 ecl run thor libW20150914-125557.so --input=data.xml --wait=1000 @@ -941,7 +1529,7 @@ ecl run thor findperson.ecl --input="<request><LName>JONES</LName ecl run thor findperson.ecl -I C:\MyECL\ - Um hífen (-) especifica que o objeto deve ser lido a partir do + Um hífen (-) especifica que o objeto deve ser lido de stdin. @@ -954,24 +1542,26 @@ ecl run thor findperson.ecl -I C:\MyECL\ ecl run - Executa o comando ECL de execução fornecido + executa o comando ecl run fornecido Argumentos + + target - O cluster de destino para o qual será feita a - publicação + O cluster de destino no qual publicar wuid - A ID da workunit a ser executada + O ID da workunit a ser executado (WUID diferencia + maiúsculas de minúsculas) @@ -989,31 +1579,31 @@ ecl run thor findperson.ecl -I C:\MyECL\ so | dll - A biblioteca de vínculo dinâmico da workunit ou o - objeto compartilhado a ser executado + A biblioteca vinculada dinâmica da workunit ou objeto + compartilhado a ser executado - - Especifica que o objeto deve ser lido a partir de + Especifica que o objeto deve ser lido do stdin - Opções + Options - -n, --name + --job-name - O nome da tarefa + O nome do job a ser usado para a workunit -in,--input=<file|xml> - O arquivo ou conteúdo xml a ser usado como entrada da + O arquivo ou conteúdo xml a ser usado como entrada de consulta @@ -1025,103 +1615,103 @@ ecl run thor findperson.ecl -I C:\MyECL\ - --wait=<sec> + --wait=<ms> - Tempo máximo restante para a conclusão da atualização - do cluster (em ms) + Define o valor de entrada armazenado + (stored('name')) - --exception-level + --poll - Define a severidade mínima para relatar exceções. Os - possíveis níveis de severidade são info, atenção, ou erro. O padrão é “info”, que retorna - todas as exceções. + Envia um job de forma assíncrona e sonda o servidor + até que o estado da workunit mude para concluído. Em + seguida, recupera os resultados. Combine com a opção --wait + para limitar o tempo de pesquisa. - -v, --verbose + --exception-level - Saída de informações adicionais de - rastreamento + Define a gravidade mínima para relatar exceções. Os + possíveis níveis de gravidade são info, warning, ou error. O padrão é info que retorna + todas as exceções. - -s, --server + --protect - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Esta opção evita que a workunit seja excluída - --port + Opções ECL - A porta dos serviços do ECL Watch (o padrão é - 8010) + - -ssl + --main=<definition> - Use o protocolo SSL para proteger a conexão com o - servidor. + Essa opção permite compilar consultas de árvores ou + repositórios de origem existentes. Ele pode ser usado para + especificar repositórios e versões padrão a serem usados. + Consulte a seção "Git + Support" para uso específico. - --poll + --snapshot, -sn=<label> - Envia uma workunit de forma assíncrona e pesquisa o - servidor até que o estado da tarefa seja alterado para - concluído. Em seguida, os resultados são restabelecidos. - Combine com a opção --wait para limitar o tempo da - pesquisa. + Rótulo do Snapshot a ser usado de um repositório ECL + herdado - -u, --username + --ecl-only - O nome do usuário (se necessário) + Envie a consulta ECL para o cluster HPCC Systems como + texto em vez de como um arquivo gerado - -pw, --password + --limit=<limit> - A senha (se necessário) + Define o limite de resultados para a consulta - --main + -f<option>[=value] - A definição a ser usada a partir de um repositório - ECL antigo + Defina uma opção ECL (equivalente a #option) - --ecl-only + -f-<option>[=value] - Envia a consulta ECL para o HPCC como texto em vez de - um arquivo gerado + Defina uma opção de linha de comando eclcc com o + traço único ('-') - --limit + -f--<option>[=value] - Define o limite do resultado da consulta. O padrão é - 100. + Defina uma opção de linha de comando eclcc com o + traço duplo ('--') - -f<option>[=value] + -Dname=value - Define uma opção ECL (equivalente a #option no - ECL) + Substituir a definição de um atributo global + 'name' - Opções ECCLC + Opções eclcc @@ -1129,169 +1719,154 @@ ecl run thor findperson.ecl -I C:\MyECL\ -I <path> - Adiciona um caminho aos locais para procurar por - importações ecl (ex. -I C:\MyECL\ ) + Adicionar caminho aos locais para pesquisar + importações ecl -L <path> - Adiciona um caminho aos locais para procurar + Adicionar caminho aos locais para pesquisar bibliotecas do sistema --manifest - Especifica o caminho para manifestar o - arquivo + Especifique o caminho para o arquivo de + manifesto - -checkDirty + -g, --debug - Faz com que o eclcc gere um aviso para qualquer - atributo que tenha sido modificado (conforme o resultado do - status git) O uso dessa função exige que o git esteja - instalado e disponível no caminho. + Habilitar símbolos de depuração no código + gerado - --nostdinc + -checkDirty - Não inclua o diretório atual em -I + Esta opção relata quaisquer atributos modificados + usando git status - --fastsyntax + --fetchrepos - Atrasar funções de expansão ao analisar. Pode - acelerar processamento para algumas consultas + Esta opção baixa automaticamente todos os + repositórios ausentes associados às dependências - -f-xxx + -R<repo>[#version]=<path> - Passará a opção -xxx para o eclcc + Esta opção resolve referências de repositório + especificadas no diretório <path> - - - - - - - ecl results - - ecl results <wuid> [--noroot] - [--exception-level=<value>] - - - Examples: - - ecl results W20170519-142920 -ecl results W20170519-142920 --noroot --exception-level=error - - - - - - + + --updaterepos - + Definir esta opção atualiza automaticamente os + repositórios associados às dependências + - - ecl results + Opções + Comuns - Retorna o resultado completo de uma WUID em formato - XML. + - Argumentos + --help + + Exibe informações de uso para o comando + fornecido - wuid + -v, --verbose - A workunit a partir da qual os resultados serão - retornados. + Saída de informações adicionais de + rastreamento - Opções + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --noroot + -ssl, --ssl - Suprime a tag raiz <Result> no XML - retornado. + Use SSL para proteger a conexão com o + servidor. - --exception-level + --accept-self-signed - Define a severidade mínima para relatar exceções. Os - possíveis níveis de severidade são info, atenção, ou erro. O padrão é “info”, que retorna - todas as exceções. + Permite que os servidores SSL usem certificados + autoassinados - -v, --verbose + --cert - Saída de informações adicionais de - rastreamento + Caminho para o arquivo que contém o certificado de + cliente SSL - -s, --server + --key - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - --port + --cacert - A porta dos serviços do ECL Watch (o padrão é - 8010) + Caminho para o arquivo que contém o certificado SSL + CA - -ssl + --port - Use o protocolo SSL para proteger a conexão com o - servidor. + A porta de serviços ECL (o padrão é 8010) - -u, --username + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -1299,15 +1874,179 @@ ecl results W20170519-142920 --noroot --exception-level=error - - ecl activate + + ecl results + + ecl results <wuid> [--noroot] + [--exception-level=<value>] + + + Exemplos: + + ecl results W20170519-142920 +ecl results W20170519-142920 --noroot --exception-level=error + + + + + + + + + + + + + ecl results + + retorna os resultados completos de um determinado + WUID no formato XML. + + + + Arguments + + + + wuid + + A workunit da qual retornar resultados. (WUID + diferencia maiúsculas de minúsculas) + + + + Opções + + + + --noroot + + Suprime a marca root <Result> no XML + retornado. + + + + --exception-level + + Define a gravidade mínima para relatar exceções. Os + possíveis níveis de gravidade são info, warning, ou error. O padrão é info que retorna + todas as exceções. + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido + + + + -v, --verbose + + Saída de informações adicionais de + rastreamento + + + + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL + + + + -pw, --password + + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. + + + + --wait-connect=<Ms> + + Tempo limite ao conectar ao servidor (em + milissegundos) + + + + --wait-read=<Secs> + + Tempo limite durante a leitura do soquete (em + segundos) + + + + + + + + ecl activate ecl activate <queryset> <query_id> Exemplo: - ecl activate Roxie FindpersonService.4 + ecl activate roxie FindpersonService.4 @@ -1321,29 +2060,42 @@ ecl results W20170519-142920 --noroot --exception-level=error ecl activate - Ativa uma consulta publicada. Essa função atribui uma - consulta à sua réplica ativa de mesmo nome. + Ativa uma consulta publicada. Isso atribui uma + consulta ao alias ativo com o mesmo nome da + consulta. Argumentos + + - queryset + target - O nome do grupo de consultas que contém a consulta a + O nome do queryset de destino que contém a consulta a ser ativada query_id - Compilar e Publicar a consulta para o Roxie + A consulta para ativar - Opções + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido @@ -1356,47 +2108,77 @@ ecl results W20170519-142920 --noroot --exception-level=error -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados - -u, --username + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -1412,7 +2194,7 @@ ecl results W20170519-142920 --noroot --exception-level=error Exemplo: - ecl deactivate Roxie FindpersonService + ecl deactivate roxie FindpersonService @@ -1426,8 +2208,8 @@ ecl results W20170519-142920 --noroot --exception-level=error ecl deactivate - Desativa uma consulta publicada ao remover o alias da - consulta ativa de um determinado grupo de consultas. + Desativa uma consulta publicada removendo um alias de + consulta ativa do queryset fornecido. @@ -1435,21 +2217,30 @@ ecl results W20170519-142920 --noroot --exception-level=error - queryset + target - O nome do grupo de consultas que contém o alias a ser - desativado + O nome do queryset de destino contendo o alias para + desativar active_alias - O alias ativo que será removido do grupo de - consultas + O alias ativo a ser removido do queryset - Opções + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido @@ -1462,47 +2253,77 @@ ecl results W20170519-142920 --noroot --exception-level=error -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados - -u, --username + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -1535,251 +2356,993 @@ ecl queries list roxie --target=roxie --show=A ecl queries list - Exibe uma lista das consultas em um ou mais grupos de - consultas. Se um cluster for fornecido, os grupos de - consultas associados com esse cluster serão exibidos. Caso - nenhum grupo de consultas ou cluster for especificado, todos - os grupos de consultas serão mostrados. + Exibe uma lista das consultas em um ou mais + querysets. Se um cluster for fornecido, os querysets + associados a esse cluster serão mostrados. Se nenhum + queryset ou cluster for especificado, todos serão + mostrados - Ações + list + + Lista as consultas no queryset(s) + + + + Opções + + + + <target> + + O nome do queryset do qual listar as + consultas + + + + -t, --target + + O nome do cluster de destino associado às consultas a + serem listadas + + + + --inactivate + + Mostrar apenas as consultas que não possuem um alias + ativo + + + + --show=<flags> + + Mostrar apenas consultas com flags + correspondentes + + + + Flags + + + + A + + Ativo + + + + S + + Suspenso + + + + U + + Sem flags + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido + + + + -v, --verbose + + Saída de informações adicionais de + rastreamento + + + + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL + + + + -pw, --password + + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. + + + + --wait-connect=<Ms> + + Tempo limite ao conectar ao servidor (em + milissegundos) + + + + --wait-read=<Secs> + + Tempo limite durante a leitura do soquete (em + segundos) + + + + + + + + ecl queries files + + ecl queries files <target> + [<query>] + + O comando queries files exibe uma lista dos arquivos atualmente + em uso pela determinada consulta. Se a opção de + consulta for omitida, ela retornará uma lista de arquivos para todas + as consultas no destino especificado. + + Exemplos: + + ecl queries files roxie myquery + + + Exemplo de resultado: + + > ecl queries files roxie myquery + ------------------ +Query: myquery +Files used: + jd::subfile1, 100 bytes, 2 part(s) + jd::subfile2, 100 bytes, 2 part(s) + +SuperFiles used: + jd::mysuperfile + > jd::subfile2 + > jd::subfile1 + + + + + + + + + + Opções + + + + target + + Nome do cluster de destino no qual a consulta é + publicada + + + + query + + Opcional. Nome da consulta para a qual obter uma + lista de arquivos usados. Se omitido, uma lista de arquivos + para cada consulta no destino especificado é + retornada. + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido + + + + -v, --verbose + + Saída de informações adicionais de + rastreamento + + + + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL + + + + -pw, --password + + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. + + + + --wait-connect=<Ms> + + Tempo limite ao conectar ao servidor (em + milissegundos) + + + + --wait-read=<Secs> + + Tempo limite durante a leitura do soquete (em + segundos) + + + + + + + + ecl queries copy + + ecl queries copy <source_query_path> + <target_queryset> [--activate] + + Exemplos: + + ecl queries copy thor/findperson thor2 --activate +ecl queries copy //192.168.1.10:8010/thor/findperson thor + + + + + + + + + + + + + ecl queries copy + + Copia uma consulta de um queryset para outro. Uma + consulta pode ser copiada de um ambiente HPCC Systems para + outro usando um caminho que começa com '//' seguido pelo IP + ou nome do host e porta do ECL Watch de origem e, em + seguida, seguido pelo queryset e consulta de origem. + + + + Ações + + + + copy + + Copie uma consulta de um queryset para outro + + + + Opções + + + + source_query_path + + O caminho da consulta a ser copiada usando o formato: + [//ip:port/]queryset/query ou queryset/query. + + + + <target> + + O nome do cluster de destino para o qual copiar a + consulta + + + + --source-ssl + + Use SSL ao conectar-se à fonte (padrão se --ssl + estiver ativado) + + + + --source-no-ssl + + Não use SSL ao conectar-se à fonte (padrão se --ssl + NÃO estiver ativado) + + + + --no-files + + Especifica para não copiar as informações do arquivo + DFS para arquivos referenciados pela consulta + + + + --daliip=<IP> + + Endereço IP ou nome do host do Dali DFS remoto a ser + usado para copiar as informações do arquivo. Necessário + apenas quando o ambiente remoto for inferior à versão + 3.8 + + + + --source-process + + Cluster de processo para copiar arquivos de + + + + -A, --activate + + Ativa a consulta quando copiada + + + + -sp, --suspend-prev + + Suspender consulta ativa anteriormente + + + + -dp, --delete-prev + + Excluir consulta ativa anteriormente + + + + --no-reload + + Especifica para não solicitar um recarregamento do + cluster Roxie + + + + -O, --overwrite + + Se deseja substituir as informações existentes - + verdadeiro se presente + + + + --update-super-files + + Atualize os superarquivos DFS locais se o DALI remoto + for alterado + + + + --update-clone-from + + Atualize o clone local a partir do local se o DALI + remoto tiver mudado + + + + --dont-append-cluster + + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo + + + + --allow-foreign + + Especifica para permitir o uso de arquivos externos + em uma consulta Roxie. Se uma consulta Roxie fizer + referência a arquivos externos e isso não estiver ativado, a + cópia falhará. Evita falhas ao usar arquivos externos na + consulta Roxie. + + + + --wait=<ms> + + Tempo máximo de espera pela atualização do término do + cluster (em ms) + + + + --timeLimit=<sec> + + Valor a ser definido para a configuração do timeLimit + da consulta + + + + --warnTimeLimit=<sec> + + Valor a ser definido para a configuração do + warningTimeLimit da consulta + + + + --memoryLimit=<mem> + + Valor a ser definido para a configuração do + memoryLimit da consulta. Formate <mem> como 500000B, + 550K, 100M, 10G ou 1T, etc. + + + + --priority=<val> + + A prioridade para esta consulta. O valor pode ser + LOW, HIGH, SLA, NONE. NONE limpará a configuração + atual. + + + + --comment=<string> + + Definir um comentário associado à consulta + + + + --n, --name=<value> + + O nome de destino para a consulta copiada + + + + Opções DFU + + + + + + --dfu-copy + + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano + + + + --init-publisher-wuid + + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando + + + + --dfu-queue + + A Fila DFU a ser usada ao fazer uma cópia DFU + + + + --dfu-wait + + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) + + + + --dfu-overwrite + + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. + + + + --only-copy-files + + Copie os arquivos necessários para a consulta, mas + não publique a consulta + + + + --stop-if-files-copied + + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido + + + + -v, --verbose + + Saída de informações adicionais de + rastreamento + + + + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL + + + + -pw, --password + + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. + + + + --wait-connect=<Ms> + + Tempo limite ao conectar ao servidor (em + milissegundos) + + + + --wait-read=<Secs> + + Tempo limite durante a leitura do soquete (em + segundos) + + + + + + + + ecl queries copy-set + + ecl queries copy-set <source_target> + <destination_target> [--all] [--clone-active-state] + + + Exemplos: + + ecl queries copy-set roxie1 roxie2 +ecl queries copy-set roxie1 roxie2 --all +ecl queries copy-set roxie1 roxie2 --clone-active-state + + + + + + + + + + + + ecl queries copy-set + + Copia um conjunto de consultas de um destino para + outro. + + + + Ações + + + + copy-set + + Copie um queryset de um destino para outro. + + + + Opções + + + + source_target + + Cluster de destino do qual copiar consultas. - list + destination_target - Lista as consultas no(s) grupo(s) de - consultas + Cluster de destino para o qual copiar as + consultas. - Opções + --source-ssl + + Use SSL ao conectar-se à fonte (padrão se --ssl + estiver ativado) - queryset + --source-no-ssl - O nome do grupo de consultas a partir do qual as - consultas serão listadas + Não usa SSL ao conectar-se à fonte (padrão se --ssl + NÃO estiver ativado) - -t, --target + --all - O cluster de destino associado às consultas a serem - listadas + Especifica a cópia de consultas ativas e inativas. Se + omitido, apenas ativos são copiados. - -A, --activate + --no-files - Ativa a consulta quando publicada + Especifica para não copiar as informações do arquivo + DFS para arquivos referenciados pela consulta - --show=<flags> + --daliip= - Mostra apenas as consultas com indicadores - combinados + Endereço IP ou nome do host do Dali remoto a ser + usado para pesquisas de arquivos lógicos. - Indicadores + --source-process + + Cluster de processo do qual copiar arquivos. - A + --clone-active-state - Ativo + Torna as consultas copiadas ativas no destino se elas + estiverem ativas na origem. - S + -O, --overwrite - Suspenso + Se deseja substituir as informações DFS existentes - + verdadeiro se presente - U + --update-super-files - Sem Indicadores + Atualize os superarquivos DFS locais se o DALI remoto + for alterado - Opções + --update-clone-from + + Atualize o clone local a partir do local se o DALI + remoto tiver mudado - -v, --verbose + --dont-append-cluster - Saída de informações adicionais de - rastreamento + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo - -s, --server + --allow-foreign - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Especifica para permitir o uso de arquivos externos + em uma consulta Roxie. Se uma consulta Roxie fizer + referência a arquivos externos e isso não estiver ativado, a + cópia falhará. - --port + Opções DFU - A porta dos serviços do ECL Watch (o padrão é - 8010) + - -ssl + --dfu-copy - Use o protocolo SSL para proteger a conexão com o - servidor. + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano - -u, --username + --init-publisher-wuid - O nome do usuário (se necessário) + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando - -pw, --password + --dfu-queue - A senha (se necessário) + A Fila DFU a ser usada ao fazer uma cópia DFU - --wait-connect=<Ms> + --dfu-wait - Tempo limite durante a conexão ao servidor (em - milisegundos) + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) - --wait-read=<Secs> + --dfu-overwrite - Tempo limite durante a leitura do socket (em - segundos) + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. - - - - - - - arquivos de consultas ecl - arquivos de consultas ecl <target> - [<query>] - - The queries files command displays a list of the files currently - in use by the given query. If the query option is - omitted, it returns a list of files for all queries on the specified - target. + + --only-copy-files - Examplos: + Copie os arquivos necessários para a consulta, mas + não publique a consulta + - ecl queries files roxie myquery - + + --stop-if-files-copied - Examplo de resultado: + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta + - > ecl queries files roxie myquery - ------------------ -Query: myquery -Files used: - jd::subfile1, 100 bytes, 2 part(s) - jd::subfile2, 100 bytes, 2 part(s) + + Opções + Comuns -SuperFiles used: - jd::mysuperfile - > jd::subfile2 - > jd::subfile1 + + - - - + + --help - + Exibe informações de uso para o comando + fornecido + - - Opções + -v, --verbose + + Saída de informações adicionais de + rastreamento - target + -s, --server - Nome do cluster de destino em que a consulta será - publicada + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - query + -ssl, --ssl - Opcional. Nome da consulta para obter a lista de - arquivos utilizados. Se omitido, uma lista de arquivos para - cada consulta será retornado no destino - especificado. + Use SSL para proteger a conexão com o + servidor. - Opções + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados - -v, --verbose + --cert - Informação adicional de rastreamento do - Output + Caminho para o arquivo que contém o certificado de + cliente SSL - -s, --server + --key - Endereço IP ou hostname do servidor ESP executando - serviços ECL Watch + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - --port + --cacert - Porta dos serviços do ECL Watch (Padrão é - 8010) + Caminho para o arquivo que contém o certificado SSL + CA - -ssl + --port - Utilize SSL para segurar a conexão com o - servidor. + A porta de serviços ECL (o padrão é 8010) - -u, --username + -u, --username=<name> - Nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - Senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Timeout enquanto conecta ao servidor (em - milesegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Timeout enquanto é feita leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -1787,16 +3350,15 @@ SuperFiles used: - - ecl queries copy + + ecl queries config - ecl queries copy <source_query_path> - <target_queryset> [--activate] + ecl queries config <target> + <queryid> [options] Exemplos: - ecl queries copy thor/findperson thor2 --activate -ecl queries copy //192.168.1.10:8010/thor/findperson thor + ecl queries config thor findperson --wait=1000 @@ -1809,13 +3371,10 @@ ecl queries copy //192.168.1.10:8010/thor/findperson thor - ecl queries copy + ecl queries config - Copia uma consulta de um grupo para outro. Uma - consulta pode ser copiada de um ambiente do HPCC para outro - usando um caminho que começa com '//', seguido do IP ou nome - do host e da porta do ECL Watch de origem seguida pelo grupo - de consultas e a consulta de origem. + Atualiza os valores de configuração da + consulta @@ -1823,9 +3382,10 @@ ecl queries copy //192.168.1.10:8010/thor/findperson thor - copy + config - Copia uma consulta de um grupo para outro + Definir ou atualizar valores de configuração de + consulta @@ -1833,169 +3393,162 @@ ecl queries copy //192.168.1.10:8010/thor/findperson thor - source_query_path - - O caminho da consulta a ser copiada usando o formato: - [//ip:port/]queryset/query or queryset/query. - - - - target_queryset + target - O nome do grupo de consultas para o qual a consulta - será copiada + O nome do queryset de destino - -t, --target + queryid - O cluster de destino a ser associado com a tarefa - remota + Nome da consulta - --no-files + --no-reload - Especifica que as informações do arquivo DFS não - devem ser copiadas para os arquivos referenciados pela - consulta + Especifica para não solicitar um recarregamento do + cluster Roxie - -A, --activate + --wait=<sec> - Ativa a consulta quando copiada + Tempo máximo de espera pela atualização do término do + cluster (em ms) - -sp, --suspend-prev + --timeLimit=<sec> - Suspende a consulta previamente ativa + Valor a ser definido para a configuração do timeLimit + da consulta - -dp, --delete-prev + --warnTimeLimit=<sec> - Exclui a consulta previamente ativa + Valor a ser definido para a configuração do + warningTimeLimit da consulta - --no-reload + --memoryLimit=<mem> - Especifica que um novo carregamento do cluster Roxie - não deve ser solicitado + Valor a ser definido para a configuração do + memoryLimit da consulta. Formate <mem> como 500000B, + 550K, 100M, 10G ou 1T, etc. - --allow-foreign + --priority=<val> - Especifica a permissão do uso de arquivos remotos em - uma consulta Roxie. Se uma consulta Roxie referencia - arquivos remotos e se esta opção não for ativada, a cópia - falhará. + A prioridade para esta consulta. O valor pode ser + LOW, HIGH, SLA, NONE. NONE limpará a configuração + atual. - -O, --overwrite + --comment=<string> - Se a informação existente deve ser substituída – true - se estiver presente + Definir um comentário associado à consulta - --timeLimit=<sec> + Opções + Comuns - Valor a ser definido para configuração do tempo - limite da consulta + - --warnTimeLimit=<sec> + --help - Valor a ser definido para a configuração do aviso de - tempo limite da consulta + Exibe informações de uso para o comando + fornecido - --memoryLimit=<mem> + -v, --verbose - Valor a ser definido para configuração do limite de - memória da consulta. Formatar <mem> como 500000B, - 550K, 100M, 10G, ou 1T, etc. + Saída de informações adicionais de + rastreamento - --wait=<sec> + -s, --server - Tempo máximo restante para a conclusão da atualização - do cluster (em ms) + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -v, --verbose + -ssl, --ssl - Saída de informações adicionais de - rastreamento + Use SSL para proteger a conexão com o + servidor. - -s, --server + --accept-self-signed - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Permite que os servidores SSL usem certificados + autoassinados - --port + --cert - A porta dos serviços do ECL Watch (o padrão é - 8010) + Caminho para o arquivo que contém o certificado de + cliente SSL - -ssl + --key - Use o protocolo SSL para proteger a conexão com o(s) - servidor(es). + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - --source-ssl + --cacert - Use SSL when connecting to the source (default if - --ssl is enabled) + Caminho para o arquivo que contém o certificado SSL + CA - --source-no-ssl + --port - Não utilize SSL ao se conectar com a fonte (padrão é - --ssl DESabilitado) + A porta de serviços ECL (o padrão é 8010) - -u, --username + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -2003,18 +3556,16 @@ ecl queries copy //192.168.1.10:8010/thor/findperson thor - - ecl queries copy-set + + ecl queries recreate - ecl queries copy-set <source_target> - <destination_target> [--all] [--clone-active-state] - + ecl queries recreate <target> + <query> [<destination-target>] [options] Exemplos: - ecl queries copy-set roxie1 roxie2 -ecl queries copy-set roxie1 roxie2 --all -ecl queries copy-set roxie1 roxie2 --clone-active-state + ecl queries recreate roxie findpeople +ecl queries recreate roxie findpeople roxie2 @@ -2026,10 +3577,13 @@ ecl queries copy-set roxie1 roxie2 --clone-active-state - ecl queries copy-set + ecl queries recreate - Copia um conjunto de consultas ECL de um destino a - outro. + Recompila uma consulta em uma nova workunit e + republica a nova workunit. Isso é útil ao atualizar para um + novo compilador ECL e você deseja recompilar uma consulta + exatamente da mesma fonte. O arquivo ECL deve estar + disponível na workunit da consulta. @@ -2037,242 +3591,250 @@ ecl queries copy-set roxie1 roxie2 --clone-active-state - copy-set + recreate - Copia um conjunto de consultas ECL de um destino a - outro + Recompila uma consulta em uma nova workunit e + republica a nova workunit. - Opções + Argumentos - source_target + target - Cluster de destino a partir do qual as consultas ECL - são copiadas + O destino da consulta que você deseja recriar está + em - destination_target + query - Cluster de destino para o qual as consultas ECL são - copiadas. + O ID da consulta que você deseja recriar - --all + destination-target - Especifica copiar consultas ECL ativas e inativas. Se - omitido, apenas as consultas ativas serão copiadas. + Opcional: o destino para o qual você deseja mover a + nova consulta (se for diferente do destino de + origem) - --no-files - - Especifica que as informações do arquivo DFS não - devem ser copiadas para os arquivos referenciados pela - consulta + Options - --daliip= + -A, --activate - Endereço IP ou nome do host do Dali remoto a ser - usado para pesquisa de arquivos lógicos + Ativa a consulta quando publicada - ---source-process + --limit=<limit> - Cluster de processo da qual os arquivos serão - copiados. + Define o limite de resultados para a consulta, o + padrão é 100 - --clone-active-state + -sp, --suspend-prev - Ativa as consultas ECL copiadas no destino, caso elas - estejam ativadas na origem. + Suspende a consulta ativa anteriormente - --allow-foreign + -dp, --delete-prev - Especifica a permissão do uso de arquivos remotos em - uma consulta Roxie. Se uma consulta Roxie referencia - arquivos remotos e se esta opção não for ativada, a cópia - falhará. + Exclui a consulta ativa anteriormente - -O, --overwrite + -A-, --no-activate - Se a informação existente deve ser substituída – true - se estiver presente + Não ativa a consulta quando publicada - -v, --verbose + --no-publish - Saída de informações adicionais de - rastreamento + Cria uma unidade de trabalho recompilada, mas não a + publica - -s, --server + --no-reload - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + Especifica para não solicitar um recarregamento do + cluster RoxieSpecifies to not request a reload of the Roxie + cluster - --port + --no-files - A porta dos serviços do ECL Watch (o padrão é - 8010) + Especifica para não copiar as informações do arquivo + DFS para arquivos referenciados pela consulta - -ssl, --ssl + --allow-foreign - Use o protocolo SSL para proteger a conexão com o(s) - servidor(es). + Especifica para permitir o uso de arquivos externos + em uma consulta Roxie. Se uma consulta Roxie fizer + referência a arquivos externos e isso não estiver ativado, a + publicação falhará. - --source-ssl + --daliip=<IP> - Utilize SSL quando conectar com a fonte (padrão é - --ssl desabilitado) + Endereço IP ou nome do host do Dali remoto a ser + usado para pesquisas de arquivos lógicos remotos. - --source-no-ssl + --update-super-files - Não utilize SSL ao conectar com a fonte (padrão é - --ssl é DESabilitado) + Atualize os superarquivos DFS locais se o DALI remoto + for alterado - -u, --username + --update-clone-from - O nome do usuário (se necessário) + Atualize o clone local a partir do local se o DALI + remoto tiver mudado - -pw, --password + --dont-append-cluster - A senha (se necessário) + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo - --wait-connect=<Ms> + --source-process=<value> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Cluster de processo para copiar arquivos de - --wait-read=<Secs> + --timeLimit=<sec> - Tempo limite durante a leitura do socket (em - segundos) + Valor a ser definido para a configuração do timeLimit + da consulta - - - - - - ecl queries copy + + --warnTimeLimit=<sec> - ecl queries config <target> - <queryid> [options] + Valor a ser definido para a configuração do + warningTimeLimit da consulta + - Exemplos: + + --memoryLimit=<mem> - ecl queries config thor findperson --wait=1000 - + Valor a ser definido para a configuração do + memoryLimit da consulta. Formate <mem> como 500000B, + 550K, 100M, 10G ou 1T, etc. + - + + --priority=<val> + + A prioridade para esta consulta. O valor pode ser + LOW, HIGH, SLA, NONE. NONE limpará a configuração + atual. + - - - + + --comment=<string> - + Um comentário associado a esta consultaA comment + associated with this query + - - ecl queries copy + --wait=<sec> - Atualiza os valores de configuração da - consulta + Tempo máximo de espera pela conclusão da atualização + do cluster - Ações + Opções DFU + + - config + --dfu-copy - Define ou atualiza os valores de configuração da - consulta + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano - Opções + --init-publisher-wuid + + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando - target + --dfu-queue - O nome do queryset de destino + A Fila DFU a ser usada ao fazer uma cópia DFU - queryid + --dfu-wait - O nome da consulta + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) - --no-reload + --dfu-overwrite - Especifica que um novo carregamento do cluster Roxie - não deve ser solicitado + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. - --wait=<sec> + --only-copy-files - Tempo máximo restante para a conclusão da atualização - do cluster (em ms) + Copie os arquivos necessários para a consulta, mas + não publique a consulta - --timeLimit=<sec> + --stop-if-files-copied - Valor a ser definido para configuração do tempo - limite da consulta + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta - --warnTimeLimit=<sec> + Opções + Comuns - Valor a ser definido para a configuração do aviso de - tempo limite da consulta + - --memoryLimit=<mem> + --help - Valor a ser definido para configuração do limite de - memória da consulta. Formatar <mem> como - 500000B, 550K, 100M, 10G, ou 1T, etc. + Exibe informações de uso para o comando + fornecido @@ -2285,47 +3847,77 @@ ecl queries copy-set roxie1 roxie2 --clone-active-state -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados - -u, --username + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port - O nome do usuário (se necessário) + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> + + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -2333,16 +3925,17 @@ ecl queries copy-set roxie1 roxie2 --clone-active-state - - ecl queries recreate + + ecl queries import - ecl queries recreate <target> - <query> [<destination-target>] [options] + ecl queries import <target> + <file> [--clone-active-state] [--replace] + [options] - Examples: + Exemplo: - ecl queries recreate roxie findpeople -ecl queries recreate roxie findpeople roxie2 + ecl queries import roxie1 myqueryset.xml + @@ -2354,13 +3947,10 @@ ecl queries recreate roxie findpeople roxie2 - ecl queries recreate + ecl queries import - Recompila uma consulta em uma nova workunit e a - republica. Isto é útil quando está migrando para um novo - compilador ECL e deseja-se recompilar uma consulta da mesma - fonte. O arquivo ECL deve estar disponível junto da workunit - da consulta. + Importa o conteúdo de um queryset previamente + exportado para o disco @@ -2368,175 +3958,179 @@ ecl queries recreate roxie findpeople roxie2 - recreate + import - Recompila a consulta em uma nova workunit e a - republica. + Importa um queryset de um arquivo - Argumentos + Arguments target - A consulta do destino em que deseja recriar + O cluster de destino para o qual importar + consultas - query - - O ID da consulta que deseja recriar + Options - destination-target + --all - Opcional: O destino para qual deseja mover a nova - consulta (se for diferente do destino de origem) + Copie as consultas ativas e inativas. Se omitido, + apenas as consultas ativas são importadas. - Options + --replace + + Substitua todo o queryset existente - -A, --activate + --queries - Ativa a consulta quando publicada + Filtrar IDs de consulta para selecionar para + importação - --limit=<limit> + --no-files - Ajusta o limite de resultados para uma consulta, o - padrão é 100 + Especifica para não copiar as informações do arquivo + DFS para arquivos referenciados pela consulta - -sp, --suspend-prev + --daliip=<IP> - Suspende a consulta ativa anterior + Dali DFS remoto para usar para copiar informações de + arquivo - -dp, --delete-prev + --source-process=<value> - Exclui a consulta ativa anterior + Cluster de processo para copiar arquivos de - -A-, --no-activate + --clone-active-state - Não ativa a consulta quando publicada + Torne as consultas copiadas ativas se estiverem + ativas na origem - --no-publish + -O, --overwrite - Cria a workunit recompilada, mas não a - publica + Substitua completamente as informações do arquivo DFS + existente (perigoso) - --no-reload + --update-super-files - Especifica para não recarregar o cluster - Roxie + Atualize os superarquivos DFS locais se o DALI remoto + for alterado - --no-files + --update-clone-from - Especifica para não copiar informações do arquivo DFS - para arquivos referenciaados pela consulta. + Atualize o clone local a partir do local se o DALI + remoto tiver mudado - --allow-foreign + --dont-append-cluster - Especifica para permitr o uso de arquivos externos em - uma consulta Roxie. Se a consulta Roxie referenciar arquivos - externos e isto não estiver habilitado, a publicação irá - falhar. + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo - --daliip=<IP> + --allow-foreign - Endereço IP ou hostname do Dali remoto para pesquisa - de arquivos lógicos remotos. + Especifica para permitir o uso de arquivos externos + em uma consulta Roxie. Se uma consulta Roxie fizer + referência a arquivos externos e isso não estiver ativado, a + publicação falhará. - --update-super-files + Opções DFU - Atualiza os superfiles DFS local se o DALI remoto for - alterado + - --update-clone-from + --dfu-copy - Atualiza o clone local a partir de uma localição se o - DALI remoto for alterado + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano - --dont-append-cluster + --init-publisher-wuid - Uso somente para evitar incidentes de bloqueio devido - adição de cluster ao arquivo + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando - --source-process=<value> + --dfu-queue - Processo do cluster para copiar arquivos + A Fila DFU a ser usada ao fazer uma cópia DFU - --timeLimit=<sec> + --dfu-wait - Valor para a configuração timeLimit da - consulta. + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) - --warnTimeLimit=<sec> + --dfu-overwrite - Valor para a configuração warnTimeLimit da - consulta. + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. - --memoryLimit=<mem> + --only-copy-files - Valores par ajudar a configuração memoryLimit da - consulta. Formato <mem> como 500000B, 550K, 100M, - 10G,ou 1T, etc. + Copie os arquivos necessários para a consulta, mas + não publique a consulta - --priority=<val> + --stop-if-files-copied - A prioridade para essa consulta. Valor pode ser LOW, - HIGH, SLA, NONE. NONE irá limpar a configuração - atual. + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta - --comment=<string> + Opções + Comuns - Um comentário associado a essa consulta + - --wait=<sec> + --help - Tempo máximo de espera para o cluster finalizar a - atualização + Exibe informações de uso para o comando + fornecido @@ -2550,47 +4144,76 @@ ecl queries recreate roxie findpeople roxie2 -s, --server O endereço IP ou nome do host do servidor ESP - que está executando os serviços do ECL - Watch + executando os serviços ECL Watch - -ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) - -u, --username + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -2598,16 +4221,15 @@ ecl queries recreate roxie findpeople roxie2 - - ecl queries import + + ecl queries export - ecl queries import <target> - <file> [--clone-active-state] [--replace] + ecl queries export <target> [options] - Example: + Exemplo: - ecl queries import roxie1 myqueryset.xml + ecl queries export roxie1 --output=myqueryset.xml @@ -2620,20 +4242,21 @@ ecl queries recreate roxie findpeople roxie2 - ecl queries import + ecl queries export - Importa o conteúdo de um queryset previamente - exportado para o disco. + salva informações de backup sobre um determinado + queryset em um arquivo. - Actions + Ações - import + export - Importa um queryset de um arquivo + Exporta informações do queryset para um + arquivo @@ -2643,149 +4266,129 @@ ecl queries recreate roxie findpeople roxie2 target - O cluster de destino para importar as - consultas - - - - Options - - - - --all - - Copia ambas consultas, ativas e inativas. Se omitido, - somente as ativas serão importadas. - - - - --replace - - Substitui por completo um queryset existente + Nome do cluster de destino do qual exportar - --queries + -O, --output=<filename> - Filtra ids de consultas para importação + Filename to save exported backup information to + (optional) - --no-files - - Especifica para não copiar informações do arquivo DFS - para arquivos referenciaados pela consulta. + Opções - --daliip=<IP> + --active-only - DFS DALI remoto para cópia de informações do - arquivo + Inclua apenas consultas ativas no queryset + exportado. - --source-process=<value> + --protect - Processo do cluster para copiar arquivos + Proteja as workunits para as consultas + incluídas - --clone-active-state + Opções + Comuns - Faz cópia das consultas ativas se estiverem ativas na - origem + - -O, --overwrite + --help - Substitui por completo informações do arquivo DFS - (cuidado) + Exibe informações de uso para o comando + fornecido - --update-super-files + -v, --verbose - Atualiza os superfiles DFS local se o DALI remoto for - alterado + Saída de informações adicionais de + rastreamento - --update-clone-from + -s, --server - Atualiza o clone local a partir de uma localição se o - DALI remoto for alterado + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --dont-append-cluster + -ssl, --ssl - Uso somente para evitar incidentes de bloqueio devido - adição de cluster ao arquivo + Use SSL para proteger a conexão com o + servidor. - --allow-foreign + --accept-self-signed - Especifica para permitr o uso de arquivos externos em - uma consulta Roxie. Se a consulta Roxie referenciar arquivos - externos e isto não estiver habilitado, a publicação irá - falhar. + Permite que os servidores SSL usem certificados + autoassinados - -v, --verbose + --cert - Saída de informações adicionais de - rastreamento + Caminho para o arquivo que contém o certificado de + cliente SSL - -s, --server + --key - O endereço IP ou nome do host do servidor ESP - que está executando os serviços do ECL - Watch + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - -ssl + --cacert - Use o protocolo SSL para proteger a conexão com o - servidor. + Caminho para o arquivo que contém o certificado SSL + CA --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) - -u, --username + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -2793,15 +4396,17 @@ ecl queries recreate roxie findpeople roxie2 - - ecl queries export + + ecl packagemap add - ecl queries export <target> - [options] + ecl packagemap add [--daliip][options] + <target> <filename> - Exemplo: + Exemplos: - ecl queries export roxie1 --output=myqueryset.xml + ecl packagemap add -s=192.168.1.10 roxie mypackagemap.pkg +ecl packagemap add roxie mypackagemap.pkg --overwrite +ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 @@ -2814,10 +4419,9 @@ ecl queries recreate roxie findpeople roxie2 - ecl queries export + ecl packagemap add - Salva informações de backup sobre um queryset em um - arquivo. + Chama o comando packagemap add @@ -2825,10 +4429,9 @@ ecl queries recreate roxie findpeople roxie2 - export + add - Exporta as informações de um queryset para um - arquivo + Adiciona um packagemap ao cluster de destino @@ -2838,228 +4441,250 @@ ecl queries recreate roxie findpeople roxie2 target - Nome do cluster de destino para exportar + O destino para associar o packagemap com - -O, --output=<filename> + filename - Nome do arquivo para salvar informações para backup - (opcional) + O nome do arquivo que contém as informações do + packagemap. - Options + --daliip= + + IP address or hostname of the remote Dali to use for + logical file lookups - --active-only + Opções + - Somente inclui consultas ativas no queryset - exportado. + + -O, --overwrite + + Se deseja substituir as informações existentes - + verdadeiro se presente - --protect + -A, --activate - Protege as workunits para as consultas - inclusas + Ativa o packagemap - -v, --verbose + --allow-foreign - Saída de informações adicionais de - rastreamento + Especifica para permitir o uso de arquivos externos. + Se um packagemap fizer referência a arquivos externos e isso + não estiver ativado, a inclusão do packagemap + falhará. - -s, --server + --pmid=<packagemapid> + + id do packagemap - o padrão é o nome do arquivo se + não for especificado + + + + --global-scope - O endereço IP ou nome do host do servidor ESP - que está executando os serviços do ECL - Watch + O packagemap específico com esta opção pode ser + compartilhado entre vários alvos - --port + --preload-all - A porta dos serviços do ECL Watch (o padrão é - 8010) + Define a opção de pré-carregamento de arquivos para + todos os pacotes - -ssl + --replace - Use o protocolo SSL para proteger a conexão com o - servidor. + Substitua o packagemap existente - -u, --username + --update-superfiles - O nome do usuário (se necessário) + Atualiza os superarquivos DFS locais se o DALI remoto + for alterado - -pw, --password + --update-clone-from - A senha (se necessário) + Atualize o clone local a partir do local se o DALI + remoto tiver mudado - --wait-connect=<Ms> + --dont-append-cluster - Tempo limite durante a conexão ao servidor (em - milisegundos) + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo - --wait-read=<Secs> + Opções DFU - Tempo limite durante a leitura do socket (em - segundos) + - - - - - - - ecl packagemap add - ecl packagemap add [--daliip][options] - <target> <filename> + + --dfu-copy - Exemplos: + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano + - ecl packagemap add -s=192.168.1.10 roxie mypackagemap.pkg -ecl packagemap add roxie mypackagemap.pkg --overwrite -ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 - + + --init-publisher-wuid - + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando + - - - + + --dfu-queue - + A Fila DFU a ser usada ao fazer uma cópia DFU + - - ecl packagemap add + --dfu-wait - Aciona o comando adicionar Package Map + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) - Ações + --dfu-overwrite + + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. - add + --only-copy-files - Adiciona um packgemap a um cluster de destino + Copie os arquivos necessários para a consulta, mas + não publique a consulta - Argumentos + --stop-if-files-copied + + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta - target + Opções + Comuns - O destino com o qual o package map será - associado + - filename + --help - O nome do arquivo que contém as informações do - package map. + Exibe informações de uso para o comando + fornecido - --daliip= + -v, --verbose - Endereço IP ou nome do host do Dali remoto a ser - usado para pesquisa de arquivos lógicos + Saída de informações adicionais de + rastreamento - Opções + -s, --server + + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -O, --overwrite + -ssl, --ssl - Se a informação existente deve ser substituída – true - se estiver presente + Use SSL para proteger a conexão com o + servidor. - -A, --activate + --accept-self-signed - Ativar o Package Map + Permite que os servidores SSL usem certificados + autoassinados - --allow-foreign + --cert - Especifica a permissão do uso de arquivos remotos. - Se um package map referencia arquivos remotos - ese esta opção não for ativada, a adição - falhará. + Caminho para o arquivo que contém o certificado de + cliente SSL - --pmid=<packagemapid> + --key - ID do packagemap – se não for especificado, o padrão - é o nome do arquivo + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - -v, --verbose + --cacert - Saída de informações adicionais de - rastreamento + Caminho para o arquivo que contém o certificado SSL + CA - -s, --server + --port - O endereço IP ou nome do host do servidor ESP - que está executando os serviços do ECL - Watch + A porta de serviços ECL (o padrão é 8010) - --port + -u, --username=<name> - A porta dos serviços do ECL Watch (o padrão é - 8010) + O nome de usuário para acessar os serviços + ECL - -ssl + -pw, --password - Use o protocolo SSL para proteger a conexão com o - servidor. + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. - -u, --username + --wait-connect=<Ms> - O nome do usuário (se necessário) + Tempo limite ao conectar ao servidor (em + milissegundos) - -pw, --password + --wait-read=<Secs> - A senha (se necessário) + Tempo limite durante a leitura do soquete (em + segundos) @@ -3070,15 +4695,13 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap delete ecl packagemap delete [options] - <target><packagemap> + <target><packagemap> Exemplos: ecl packagemap delete roxie mypackagemap - - @@ -3089,7 +4712,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap delete - Aciona o comando para remover o package map + Chama o comando de exclusão do packagemap @@ -3099,11 +4722,47 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 delete - Remove um package map + Exclui um packagemap Opções + + + + + + <target> + + O nome do destino a ser usado ao excluir o + packagemap + + + + <filename> + + O nome do packagemap a ser excluído + + + + --global-scope + + Use quando o packagemap especificado for + compartilhado entre vários destinos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido @@ -3117,47 +4776,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server O endereço IP ou nome do host do servidor ESP - que está executando os serviços do ECL - Watch + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados - -u, --username + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username=<name> - O nome do usuário (se necessário) + O nome de usuário para acessar os serviços + ECL -pw, --password - A senha (se necessário) + A senha para acessar os serviços ECL. Se você + fornecer um nome de usuário e não fornecer uma senha, você + será promovido para uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3187,8 +4875,8 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap activate - O comando ativar desativará o package map atual, - ativando o package map especificado. + O comando activate desativará o packagemap atualmente + ativo e tornará ativo o packagemap especificado. @@ -3198,18 +4886,35 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 target - O destino que contém o package map que será + O destino que contém o packagemap a ser ativado packagemap - O nome do package map será atualizado + nome do packagemap para ativar - Opções + --global-scope + + O packagemap especificado pode ser compartilhado + entre vários destinos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -3222,48 +4927,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. + + + + --accept-self-signed - A porta dos serviços do ECL Watch (o padrão é - 8010) + Permite que os servidores SSL usem certificados + autoassinados - -ssl + --cert - Use o protocolo SSL para proteger a conexão com o - servidor. + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3293,8 +5026,8 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap deactivate - O comando desativará o package map atualmente - ativo. + O comando deactivate desativará o packagemap + atualmente ativo. @@ -3304,18 +5037,35 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 target - O destino que contém o package map que será - desativado + O destino que contém o packagemap para + desativar packagemap - O nome do package map que será desativado + Nome do packagemap para desativar - Opções + --global-scope + + O packagemap especificado pode ser compartilhado + entre vários destinos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -3328,48 +5078,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3400,7 +5178,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap list - Aciona o comando da listagem de package maps + Chama o comando packagemap list @@ -3410,7 +5188,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 list - Lista os nomes do package map carregado + Lista nomes de packagemaps carregados @@ -3420,12 +5198,22 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 target - O destino que contém o package map a ser - listado + O destino que contém o packagemap a ser + recuperado - Opções + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -3438,48 +5226,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3510,8 +5326,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap info - Aciona o comando de informações sobre o package - map + Comando que chama os packagemap @@ -3521,7 +5336,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 info - retorna informações do package map + retorna informações do packagemap @@ -3531,12 +5346,22 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 target - O destino que contém o package map a ser - recuperarado + O destino que contém o packagemap a ser + recuperado - Opções + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -3549,48 +5374,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3609,20 +5462,20 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap add-part roxie multipart.pkg addresses.pkg - O comando packagemap add-part adiciona conteúdo adicional do - package a um package map existente + O comando packagemap add-part adiciona conteúdo adicional a um + packagemap existente - + - + ecl packagemap add-part - Aciona o comando packagemap add-part. + Chama o comando packagemap add-part. @@ -3632,8 +5485,8 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 add-part - Adiciona conteúdo adicional do package map a um - existente + Adiciona conteúdo do packagemap adicional a um + packagemap existente @@ -3643,21 +5496,21 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 target - Nome do destino a ser usado ao adicionar partes do - package map + Nome do destino a ser usado ao adicionar a parte do + packagemap pmid - Identificador do package map para o qual a parte será - adicionada + Identificador do packagemap ao qual adicionar a + parte filename - Um ou mais arquivos de parte + um ou mais arquivos de partes @@ -3674,62 +5527,136 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 --delete-prev - Substitui uma parte existente de mesmo nome + Substitua uma peça existente por um nome + correspondente --daliip=<ip> - IP do Dali remoto a ser usado na pesquisa de arquivos - lógicos + IP do Dali remoto a ser usado para pesquisas de + arquivos lógicos --global-scope - O package map especificado é compartilhado entre + O packagemap especificado é compartilhado entre vários destinos --source-process=<value> - Processa o cluster para copiar arquivos + Cluster de processo para copiar arquivos de --allow-foreign - Não falha caso arquivos remotos sejam usados no - package map + Não falha se arquivos externos forem usados no + packagemap - --preload-all + all - Define a opção de carregamento prévio de todos os - pacotes + Definir a opção de pré-carregamento de arquivos para + todos os pacotes --update-super-files - Atualiza os superarquivos DFS locais se o Dali remoto - tiver sido alterado + Atualize os superarquivos DFS locais se o DALI remoto + for alteradoUpdate local DFS superfiles if remote DALI has + changed --update-clone-from - Atualiza o clone local da localização se o Dali - remoto tiver sido alterado + Atualize os superarquivos DFS locais se o DALI remoto + for alterado --dont-append-cluster - Usar apenas para evitar problemas de bloqueio devido - a adição de cluster ao arquivo + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo + + + + DFU Options + + + + + + --dfu-copy + + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano + + + + --init-publisher-wuid + + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando + + + + --dfu-queue + + A fila DFU que será usada durante a cópia do + DFU + + + + --dfu-wait + + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos). + + + + --dfu-overwrite + + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. + + + + --only-copy-files + + Copie os arquivos necessários para a consulta, mas + não publique a consulta + + + + --stop-if-files-copied + + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -3742,48 +5669,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3802,8 +5757,8 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap get-part roxie multipart.pkg contacts - O comando get-part busca uma determinada parte de um package map - + The get-part command fetches the given part from the given + packagemap @@ -3813,7 +5768,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap get-part - Aciona o comando packagemap gert-part. + Chama o comando packagemap get-part. @@ -3823,7 +5778,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 get-part - Busca uma determinada parte de um package map + Obtém a parte fornecida do packagemap. @@ -3834,20 +5789,19 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 target - Nome do destino a ser usado ao adicionar partes do - package map + Nome do destino a ser usado packagemap - Nome do package map que contém a parte + Nome do packagemap que contém a peça partname - Nome da parte a ser recuperada + Nome da peça a remover @@ -3857,8 +5811,22 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 --global-scope - O package map especificado é compartilhado entre - vários destinos + O packagemap especificado pode ser compartilhado + entre vários destinos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -3871,48 +5839,76 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch + + + + -ssl, --ssl + + Use SSL para proteger a conexão com o + servidor. - --port + --accept-self-signed - A porta dos serviços do ECL Watch (o padrão é - 8010) + Permite que os servidores SSL usem certificados + autoassinados - -ssl + --cert - Use o protocolo SSL para proteger a conexão com o - servidor. + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -3931,8 +5927,8 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap remove-part roxie multipart.pkg contacts - O comando remove-part removerá determinada parte do package - map + O comando remove-part removerá a parte fornecida do packagemap + fornecido @@ -3946,18 +5942,18 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 ecl packagemap remove-part - Aciona o comando packagemap remove-part. + Chama o comando packagemap remove-part. - Ações + Actions remove-part - Remove uma determinada parte do package - map + Remove a parte dada do mapa de + packagemap @@ -3973,13 +5969,13 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 packagemap - Nome do package map que contém a parte + Nome do packagemap que contém a peça partname - Nome da parte a ser removida + Nome da peça a remover @@ -3989,8 +5985,21 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 --global-scope - O package map especificado é compartilhado entre vários - destinos + O packagemap especificado pode ser compartilhado entre + vários destinos + + + + Opções Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -4002,47 +6011,75 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl + + Use SSL para proteger a conexão com o servidor. + + + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert - A porta dos serviços do ECL Watch (o padrão é - 8010) + Caminho para o arquivo que contém o certificado SSL + CA - -ssl + --port - Use o protocolo SSL para proteger a conexão com o - servidor. + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para uma + senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4059,39 +6096,41 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11 Exemplos: ecl packagemap validate roxie mypackagemap.pkg -ecl packagemap validate roxie --active +ecl packagemap validate roxie --active +ecl packagemap validate roxie mypackagemap.pkg --ignore-queries='findPerson*, findByZip' - O comando packagemap validate verifica se: + O comando packagemap valida se: - As superchaves referenciadas possuem subarquivos definidos - (avisa caso não existam subarquivos) + As superchaves referenciadas têm subarquivos definidos + (avisa se não houver subarquivos) - Todas as consultas ECL referenciadas existem no grupo de - consultas Roxie atual + Todas as consultas referenciadas existem no queryset Roxie + atual - Todas as consultas Roxie estão definidas no pacote + Todas as consultas Roxie são definidas no pacote - O resultado também listará qualquer arquivo usado pelas - consultas ECL, mas que não foram mapeados no package map. + O resultado também listará todos os arquivos usados por + consultas, mas não mapeados no packagemap. - Filename, --active, e --pmid são mutualmente exclusivos. As - opções --active ou --pmid validam um package map já adicionado em vez + Filename, --active e --pmid são mutuamente exclusivos. As opções + --active ou --pmid validam um packagemap que já foi adicionado em vez de um arquivo local. - A opção --queryid verifica os arquivos em uma única consulta em - vez de todas as consultas no grupo de consultas de destino. É mais - rápido quando apenas os arquivos de uma única consulta precisam ser - validados. + A opção --queryid verifica os arquivos em uma consulta em vez de + todas as consultas no queryset de destino. Isso é mais rápido quando + você só precisa validar os arquivos para uma única consulta. + + - + @@ -4099,7 +6138,7 @@ ecl packagemap validate roxie --active ecl packagemap validate - Aciona o comando packagemap validate. + Chama o comando packagemap validar. @@ -4109,7 +6148,7 @@ ecl packagemap validate roxie --active validate - Retorna informações do package map + Valida as informações do packagemap @@ -4120,18 +6159,84 @@ ecl packagemap validate roxie --active filename O nome do arquivo que contém as informações do - package map a serem validadas + packagemap para validar target - O destino que contém o package map a ser - validado + O destino que contém o packagemap para + validar - Opções + --active + + Valida o packagemap que está ativo para o destino + fornecido + + + + --check-dfs + + Esta opção verifica se existem subarquivos no + DFS + + + + -pm, --pmid + + Valida o packagemap específico + + + + --queryid + + Valida os arquivos para o queryid fornecido se eles + forem mapeados no packagemap + + + + --ignore-optional + + Não relatará arquivos opcionais que não estão + definidos no packagemap + + + + --ignore-warnings + + Não relatará avisos gerais de packagemap + + + + --ignore-queries=<setOfQueries> + + Não relatará as consultas que correspondem à + expressão. O queryset pode ser uma lista separada por + vírgulas ou você pode usar a opção uma vez por entrada. + Curingas são suportados. + + + + --global-scope + + O packagemap especificado pode ser compartilhado + entre vários alvos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -4144,68 +6249,76 @@ ecl packagemap validate roxie --active -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --active + -ssl, --ssl - Valida o package map ativo para o destino - especificado + Use SSL para proteger a conexão com o + servidor. - --pmid=<packagemapid> + --accept-self-signed - Valida o package map especificado + Permite que os servidores SSL usem certificados + autoassinados - --queryid + --cert - Valida os arquivos da ID da consulta especificada, se - não estiverem mapeados no package map + Caminho para o arquivo que contém o certificado de + cliente SSL - --port + --key - A porta dos serviços do ECL Watch (o padrão é - 8010) + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - -ssl + --cacert - Use o protocolo SSL para proteger a conexão com o - servidor. + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4219,7 +6332,7 @@ ecl packagemap validate roxie --active ecl packagemap copy <path> <target> - Copia o package map de um destino a outro. + Copia um packagemap de um destino para outro. Exemplos: @@ -4237,160 +6350,259 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 ecl packagemap copy - Aciona o comando packagemap copy + Chama o comando packagemap copy + + + + Ações + + + + copy + + Copia um packagemap de um destino para outro + + + + Argumentos + + + + path + + Caminho para o packagemap de origem a ser + copiado. + + + + target + + O destino para copiar o packagemap do pacote + para + + + + Opções + + + + -A, --activate + + Ativa o packagemap + + + + --daliip= + + Endereço IP ou nome do host do Dali remoto a ser + usado para pesquisas de arquivos lógicos + + + + --pmid=<packagemapid> + + id do packagemap - o padrão é o nome do arquivo se + não for especificado + + + + --source-process + + Cluster de processo para copiar arquivos de + + + + --preload-all + + Definir a opção de pré-carregamento de arquivos para + todos os pacotes + + + + --replace + + Substitua o packagemap existente + + + + --update-super-files + + Atualiza os superarquivos DFS locais se o Dali remoto + tiver sido alterado + + + + --update-clone-from + + Atualiza o clone local a partir do local se Dali + remoto tiver mudado - Ações + --dont-append-cluster + + Use apenas para evitar problemas de bloqueio devido à + adição de cluster ao arquivo - copy + Opções DFU - Copia o package map de um destino a outro. + - Argumentos + --dfu-copy + + Use o DFU para copiar arquivos durante a implantação, + não no Roxie em segundo plano - path + --init-publisher-wuid - Caminho para o package map de origem a ser - copiado + Pré-aloca a workunit do editor no início do comando e + exibe o WUID na linha de comando - target + --dfu-queue - O destino para o qual o package map será - copiado + A Fila DFU a ser usada ao fazer uma cópia DFU - Opções + --dfu-wait + + A quantidade de tempo em segundos para aguardar a + conclusão da cópia DFU (se --only-copy-files ou + --stop-if-files-copied forem especificados). O padrão é 1800 + (30 minutos) - -A, --activate + --dfu-overwrite - Ativar o Package Map + Especifica que o comando DFU copy deve substituir os + arquivos físicos que já estão no disco. - --daliip= + --only-copy-files - Endereço IP ou nome do host do Dali remoto a ser - usado para pesquisa de arquivos lógicos + Copie os arquivos necessários para a consulta, mas + não publique a consulta - --pmid=<packagemapid> + --stop-if-files-copied - ID do packagemap – se não for especificado, o padrão - é o nome do arquivo + Se todos os arquivos já existirem, publique a + consulta. Caso contrário, copie os arquivos necessários para + a consulta, mas não publique a consulta. - ---source-process + Opções + Comuns - Processa o cluster para copiar arquivos + - --preload-all + --help - Define a opção de carregamento prévio de todos os - pacotes + Exibe informações de uso para o comando + fornecido. - --replace + -v, --verbose - Substituir o package map + Saída de informações adicionais de + rastreamento - --update-super-files + -s, --server - Atualiza os superarquivos DFS locais se o Dali remoto - tiver sido alterado + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --update-clone-from + -ssl, --ssl - Atualiza o clone local da localização se o Dali - remoto tiver sido alterado + Use SSL para proteger a conexão com o + servidor. - --dont-append-cluster + --accept-self-signed - Usar apenas para evitar problemas de bloqueio devido - a adição de cluster ao arquivo + Permite que os servidores SSL usem certificados + autoassinados - -v, --verbose + --cert - Saída de informações adicionais de - rastreamento + Caminho para o arquivo que contém o certificado de + cliente SSL - -s, --server + --key - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - --port + --cacert - A porta dos serviços do ECL Watch (o padrão é - 8010) + Caminho para o arquivo que contém o certificado SSL + CA - -ssl + --port - Use o protocolo SSL para proteger a conexão com o - servidor. + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) - Os seguintes formatos são suportados para o caminho: + Para o caminho, os seguintes formatos são suportados: @@ -4426,11 +6638,25 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 ecl roxie attach - Une o Roxie ao Dali + Attach the roxie to Dali - Opções + --wait=<ms> + + O tempo máximo de espera em milissegundos + + + + Opções + Comuns + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -4443,47 +6669,76 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 -s, --server - O endereço IP ou nome do host do servidor ESP que - stá executando os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4514,11 +6769,25 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 ecl roxie detach - Desconecta o Roxie do Dali + Separe o roxie de Dali - Opções + --wait=<ms> + + O tempo máximo de espera em milissegundos + + + + Opções + Comuns + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -4531,48 +6800,76 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4603,12 +6900,27 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 ecl roxie reload - Recarrega as informações do Roxie a partir do - Dali + Recarrega as informações roxie do Dali - Opções + --wait=<ms> + + O tempo máximo de espera em milissegundos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -4621,48 +6933,76 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + + + --port + + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4693,11 +7033,27 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 ecl roxie check - Verifica o estado do processo Roxie + Verifica o estado do processo roxie - Opções + --wait=<ms> + + O tempo máximo de espera em milissegundos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -4710,54 +7066,76 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta dos serviços do ECL Watch (o padrão é - 8010) + Use SSL para proteger a conexão com o + servidor. - -ssl + --accept-self-signed - Use o protocolo SSL para proteger a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA - --wait=<ms> + --port - Tempo máximo de espera em milissegundos + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4771,18 +7149,18 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2 ecl roxie xref <cluster> - The roxie xref command returns - file information for the specified queries on the specified cluster. - If the queryids option is omitted, file - information about all queries is returned. The result is in XML - format. + O comando roxie xref retorna + informações de arquivo para as consultas especificadas no cluster + especificado. Se a opção queryids for + omitida, as informações do arquivo sobre todas as consultas serão + retornadas. O resultado está no formato XML. - Examples: + Exemplos: ecl roxie xref myroxie ecl roxie xref myroxie --queryids=myquery.1,myotherquery.1 - Example result: + Exemplo de resultado: <QueryXrefInfo> <Endpoint ep="192.168.56.1:9876"> @@ -4812,90 +7190,128 @@ ecl roxie xref myroxie --queryids=myquery.1,myotherquery.1 ecl roxie xref - Returns file information for the selected queries in - XML format. + Retorna as informações do arquivo para as consultas + selecionadas no formato XML. - Options + Opções --check-all-nodes - Gets query file information from all nodes. This can - be slow. + Obtém informações do arquivo de consulta de todos os + nós. Isso pode ser lento. --queryids=<csv list> - The queries for which to get file information - (default is all queries) + As consultas para as quais obter informações de + arquivo (o padrão é todas as consultas) --wait=<ms> - Max time to wait in milliseconds + O tempo máximo de espera em milissegundos + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. -v, --verbose - Informação adicional de rastreamento do - Output + Saída de informações adicionais de + rastreamento -s, --server - O endereço IP ou hostname do servidor ESP executando - os serviços do ECL Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - --port + -ssl, --ssl - A porta do serviço ECL Watch (Padrão é 8010) + Use SSL para proteger a conexão com o + servidor. - --ssl + --accept-self-signed - Utilize SSL para segurar a conexão com o - servidor. + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA - --wait=<ms> + --port - Tempo máx de espera em milesegundos + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Timeout durante a conexão ao servidor (em - milesegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Timeout durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -4936,7 +7352,7 @@ ecl bundle depends mybundle --version=2 <bundleName> - O nome de um arquivo de pacote ou de um pacote + O nome de um arquivo de pacote ou pacote instalado @@ -4949,7 +7365,14 @@ ecl bundle depends mybundle --version=2 --version - Especifica uma versão do pacote + A versão do pacote a ser ativada ou "nenhuma" + + + + --help + + Exibe informações de uso sobre o comando + fornecido @@ -4969,7 +7392,7 @@ ecl bundle depends mybundle --version=2 ecl bundle info <bundleName> [--version <versionnumber>] - Examples: + Exemplos: ecl bundle info mybundle ecl bundle info https://github.com/hpcc-systems/ecl-bundles.git @@ -4995,16 +7418,37 @@ ecl bundle info mybundle --version=2 - <bundleName> + <bundle> + + Um nome de arquivo do pacote, uma pasta do pacote, um + nome do pacote ou um URL. + + + + --branch + + Nomeia uma branch para instalar quando o pacote faz + referência a um repositório git + + + + --remote - Nome de arquivo, pasta, nome ou URL de um - pacote. + Interpreta o nome do pacote como um nome remoto do + catálogo --version - Especifica uma versão do pacote + A versão do pacote a ser ativada ou "nenhuma" + + + + --help + + Exibe informações de uso sobre o comando + fornecido @@ -5017,11 +7461,11 @@ ecl bundle info mybundle --version=2 - Se a URL termina em .git, ele supostamente é um repositório git - (buscado com o uso de um clone git); caso contrário, ele provavelmente - será a URL de um arquivo que possa ser recuperado. Em ambos os casos, - ele é trazido para uma localização local temporária, processado como - um arquivo ou diretório local e depois removido. + Se um URL terminar em .git, será considerado um repositório git + (obtido usando git clone), caso contrário, será considerado o URL de + um arquivo que pode ser recuperado. Em ambos os casos, ele é obtido em + um local temporário, processado como um arquivo/diretório local e, em + seguida, removido. @@ -5060,33 +7504,46 @@ ecl bundle install mybundle --keepprior <bundleName> - O nome ou URL de um arquivo do pacote, pasta ou de um - pacote instalado. + O nome de um pacote instalado --dryrun - Lista, mas não copia, o que seria instalado + Liste o que seria removido, mas não os remova --force - Instala mesmo na ausência das dependências - exigidas + Desinstale mesmo que outros pacotes dependam + disso --keepprior - Não remove nenhuma versão prévia do pacote + Não remova nenhuma versão anterior do pacote + + + + --remote + + Interpreta o nome do pacote como um nome remoto do + catálogo + + + + --update + + Atualize um pacote instalado existente - Atualizar + --help - Atualiza um pacote instalado existente + Exibe informações de uso sobre o comando + fornecido @@ -5099,15 +7556,51 @@ ecl bundle install mybundle --keepprior - Se a URL termina em .git, ele supostamente é um repositório git - (buscado com o uso de um clone git); caso contrário, ele provavelmente - será a URL de um arquivo que possa ser recuperado. Em ambos os casos, - ele é trazido para uma localização local temporária, processado como - um arquivo ou diretório local e depois removido. + If a URL ends in .git, it is assumed to be a git repository + (fetched using git clone) otherwise it is assumed to be the URL of a + file that can be retrieved. In either case, it is fetched to a + temporary local location, processed as a local file/directory and then + removed. + + To use the "ecl bundle install <git url>" command, you + must have git installed and configured on your system. Git must be + accessible to the user (in the path). + + Instalação Lado do + Servidor + + Um sistema usando ECL Server e um repositório MySQL remoto ou + ECLCC Server com git hooks só pode acessar pacotes se estiverem + instalados no servidor. O uso de um pacote no ECL Playground também + requer instalação no nó ECLCC Server. + + + + Em uma janela do terminal do seu servido ECLCC (ou ECL + Server), utilize este comando: + + sudo su hpccEste comando + muda para o hpcc. + + + + Em seguida, instale o pacote utilizando o comando: + + ecl bundle install <bundle URL>.git + + Por exemplo: + + ecl bundle install https://github.com/hpcc-systems/Visualizer.git + + + + Feche a janela do terminal ou use o comando exit para retomar o uso do usuário + anterior. + + - Para usar o comando "ecl bundle install <git url>", é - preciso ter o git instalado e configurado em seu sistema. O Git - precisa estar acessível ao usuário (no caminho). + @@ -5151,21 +7644,27 @@ ecl bundle install mybundle --keepprior --dryrun - Lista o que seria removido, mas não faz a - remoção + Liste o que seria removido, mas não os remova --force - Desinstala mesmo que outros pacotes sejam dependentes - deste + Desinstale mesmo que outros pacotes dependam + disso --version - Especifica uma versão do pacote + A versão do pacote a ser ativada ou "nenhuma" + + + + --help + + Exibe informações de uso sobre o comando + fornecido @@ -5215,14 +7714,20 @@ ecl bundle list myb* <pattern> Um padrão que especifica os pacotes a serem listados. - Se omitido, todos os pacotes serão - listados + Se omitido, todos os pacotes são listados --details - Relata os detalhes de cada pacote instalado + Relatar detalhes de cada pacote instalado + + + + --help + + Exibe informações de uso sobre o comando + fornecido @@ -5259,7 +7764,7 @@ ecl bundle list myb* ecl bundle use - Ativa uma versão especificada de um pacote + Torna uma versão especificada de um pacote ativo @@ -5268,7 +7773,7 @@ ecl bundle list myb* - <bundleName> + <bundle> O nome de um arquivo de pacote @@ -5276,8 +7781,14 @@ ecl bundle list myb* --version - A versão do pacote a ser ativado, ou - “nenhuma” + A versão do pacote a ser ativada ou "nenhuma" + + + + --help + + Exibe informações de uso sobre o comando + fornecido @@ -5314,20 +7825,71 @@ ecl bundle list myb* ecl roxie unused-files - Localiza arquivos no DFS para um determinado processo - Roxie que nãoesteja sendo usado atualmente pelas - consultas ECL nesse Roxie. + Localiza arquivos no DFS para o determinado processo + roxie que não são usados atualmente por consultas nesse + roxie.process_cluster - Opções + process_cluster + + O cluster de processo roxie a ser verificado + ou + + + + --roxies <list> + + Uma lista separada por vírgulas de roxies para + verificar + + + + --planes <list> + + Uma lista separada por vírgulas de planos de dados + para procurar arquivos --check-packagemaps - Exclui arquivos referenciados nos package maps - ativos + Excluir arquivos referenciados em packagemaps + ativos. + + + + --delete + + Exclui arquivos não utilizados do DFS + + + + --delete-subfiles + + Exclui arquivos não utilizados do DFS e os remove dos + superarquivos. + + + + --delete-recursive + + Exclui arquivos não utilizados do DFS e os remove dos + superarquivos recursivamente. + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -5340,48 +7902,76 @@ ecl bundle list myb* -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -5412,8 +8002,8 @@ ecl abort -n MyJob ecl abort - Aborta uma ou mais workunits de uma WUID ou nome da - workunit + aborta uma ou maisworkunits ou nome do job + fornecido @@ -5423,13 +8013,28 @@ ecl abort -n MyJob -wu - Os WUID (ID da Workunit) + O WUID (ID da Workunit) (o WUID diferencia maiúsculas + de minúsculas) -n - O nome do Job + Nome do Job + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -5442,48 +8047,76 @@ ecl abort -n MyJob -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -ssl,--ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -5514,9 +8147,9 @@ ecl status -n MyJob ecl status - Retorna o status de uma workunit ou de um nome do - job. Se for encontrado mais de um nome, será fornecido - uma lista CSV. + retorna o status de uma determinada workunit ou nome + do job. Se mais de um for encontrado, uma lista CSV será + retornada. @@ -5526,13 +8159,28 @@ ecl status -n MyJob -wu - Os WUID (ID da Workunit) + O WUID (ID da Workunit) (o WUID diferencia maiúsculas + de minúsculas) -n - O nome do Job + Nome do Job + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -5545,48 +8193,76 @@ ecl status -n MyJob -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -ssl,--ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -5617,9 +8293,8 @@ ecl getwuid -n MyCommonJobName --limit=100 ecl getwuid - Retorna a(s) WUID(s) de um determinado nome do job. - Se for encontrado mais de um nome, será fornecido uma - lista. + retorna o(s) WUID(s) para um determinado job. Se mais + de um for encontrado, uma lista será retornada. @@ -5629,14 +8304,28 @@ ecl getwuid -n MyCommonJobName --limit=100 -n - O nome do Job + Nome do job --limit=nn - Inteiro para definir o limite do resultado; o padrão - é 100 + Inteiro usado para limitar o tamanho do resultado, + padrão é 100 + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -5649,48 +8338,76 @@ ecl getwuid -n MyCommonJobName --limit=100 -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -ssl,--ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. + + --accept-self-signed + + Permite que os servidores SSL usem certificados + autoassinados + + + + --cert + + Caminho para o arquivo que contém o certificado de + cliente SSL + + + + --key + + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL + + + + --cacert + + Caminho para o arquivo que contém o certificado SSL + CA + + --port - A porta dos serviços do ECL Watch (o padrão é - 8010) + A porta de serviços ECL (o padrão é 8010) -u, --username - O nome do usuário (se necessário) + Nome do usário (se necessário) -pw, --password - A senha (se necessário) + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -5714,23 +8431,22 @@ ecl getname -wu W201407* - + - + ecl getname - Retorna o nome do job de uma determinada - workunit + Retorna o nome do job dado a uma workunit. --wuid - Os WUID (ID da Workunit) (WUID é case - sensitive) + O WUID (ID da Workunit) (o WUID diferencia maiúsculas + de minúsculas) @@ -5740,9 +8456,22 @@ ecl getname -wu W201407* --limit=<limit> - Define o limite do resultado. Esta opção é útil ao - usar elementos curinga em uma solicitação. (O padrão é - 100) + Isso define o limite de resultado. Isso é útil ao + usar curingas em uma solicitação. (O padrão é 100) + + + + Opções + Comuns + + + + + + --help + + Exibe informações de uso para o comando + fornecido. @@ -5755,62 +8484,76 @@ ecl getname -wu W201407* -s, --server - O endereço IP ou nome do host do servidor ESP que - está executando os serviços do ECL - Watch + O endereço IP ou nome do host do servidor ESP + executando os serviços ECL Watch - -ssl,--ssl + -ssl, --ssl - Use o protocolo SSL para proteger a conexão com o + Use SSL para proteger a conexão com o servidor. - --port + --accept-self-signed - A porta dos serviços do ECL Watch (o padrão é - 8010) + Permite que os servidores SSL usem certificados + autoassinados - -u, --username + --cert - O nome do usuário (se necessário) + Caminho para o arquivo que contém o certificado de + cliente SSL - -pw, --password + --key - A senha (se necessário) + Caminho para o arquivo que contém a chave privada do + certificado de cliente SSL - --wait-connect=<Ms> + --cacert - Tempo limite durante a conexão ao servidor (em - milisegundos) + Caminho para o arquivo que contém o certificado SSL + CA - --wait-read=<Secs> + --port - Tempo limite durante a leitura do socket (em - segundos) + A porta de serviços ECL (o padrão é 8010) + + + + -u, --username + + Nome do usário (se necessário) + + + + -pw, --password + + A senha (se necessário). Se você fornecer um nome de + usuário e não fornecer uma senha, você será promovido para + uma senha. --wait-connect=<Ms> - Tempo limite durante a conexão ao servidor (em - milisegundos) + Tempo limite ao conectar ao servidor (em + milissegundos) --wait-read=<Secs> - Tempo limite durante a leitura do socket (em + Tempo limite durante a leitura do soquete (em segundos) @@ -5818,122 +8561,118 @@ ecl getname -wu W201407* - - ecl zapgen - - ecl zapgen <WUID> --path - <zap_file_path> [options] + + ecl roxie memlock - Use the zapgen command to create a Zipped Analysis Package - (Z.A.P.) containing collecting system information about a workunit and - encapsulating it into a shareable package. It is a useful tool for - reporting errors, inconsistencies, or other unexpected - behavior. + ecl roxie memlock + <process_cluster> - Exemplos: + + + - ecl zapgen W20171017-091320 --path ~/reports -ecl zapgen W20171018-091399 --path ~ --inc-thor-slave-logs --description "Unexpected result from JOIN" - + - - - + + + Opções - + + - - - ecl zapgen + + process_cluster - Cria um arquivo ZAP para a workunit local - especificado. - + O cluster de processo Roxie para memunlock + + + + - - WUID + O comando ecl roxie memlock bloqueia a + memória heap Roxie. Isso ajuda a evitar consultas lentas + intermitentes, garantindo que o sistema operacional não substitua a + memória. - O WUID (Workunit ID) (WUID é case-sensitive) - + Exemplos: - - --path + ecl roxie memlock mycluster + + - O caminho do arquivo ZAP - + + ecl roxie memunlock - - Opções - + ecl roxie memunlock + <process_cluster> - - --inc-thor-slave-logs + + + - Inclui os logs do(s) escravo(s) Thor no arquivo - ZAP - + - - --description + + + Opções - Description of the issue - + + - - -v, --verbose + + process_cluster - Output additional tracing information - + O cluster de processo Roxie para memunlock + + + + - - -s, --server + O comando ecl roxie memunlock desbloqueia a + memória heap Roxie. - The IP Address or hostname of ESP server running ECL - Watch services - + Exemplos: - - -ssl,--ssl + ecl roxie memunlock mycluster + + - Use SSL para segurança da conexão ao - servidor. - + + ecl roxie getmemlocked - - --port + ecl roxie getmemlocked + <process_cluster> - A porta dos serviços do ECL Watch (o padrão é - 8010) - + + + - - -u, --username + - O nome do usuário (se necessário) - + + + Opções - - -pw, --password + + - A senha (se necessário) - + + process_cluster - - --wait-connect=<Ms> + O cluster de processo Roxie para obter o status de + bloqueio de memória + + + + - Tempo limite durante a conexão ao servidor (em - milisegundos) - + O comando ecl roxie getmemlocked recupera o + status de bloqueio de memória heap Roxie. - - --wait-read=<Secs> + Exemplos: - Tempo limite durante a leitura do socket (em - segundos) - - - - + ecl roxie getmemlocked mycluster + diff --git a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_IDE.xml b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_IDE.xml index c15fee365c3..6a46eb82961 100644 --- a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_IDE.xml +++ b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_IDE.xml @@ -195,20 +195,26 @@ Selecione a aba Compile . - Os detalhes do compilador são especificados - automaticamente. Caso queira substituir os valores padrão, - marque a caixa de seleção Override - Automatic Compiler Selection . - - Observação: Você pode ter - várias versões do compilador e das ferramentas cliente - instaladas. Isso permite ter várias configurações em que o - compilador corresponda a cada servidor que você precisa acessar. - Marque a caixa Override Automatic Compiler - Selection e especifique o compilador correspondente à - sua instância do HPCC . - - + Nota: Você pode ter + várias versões do compilador e das ferramentas do cliente + instaladas. Isso permite que você tenha várias configurações em + que o compilador corresponda a cada servidor que você precisa + acessar. Marque a caixa de seleção Override Automatic Compiler Selection e + especifique o Complier que deseja usar. + + Para o Compiler, geralmente é melhor deixar o sistema + selecionar a melhor correspondência para você. Você pode ver os + compiladores disponíveis na lista suspensa Best Compiler Match. + + Use o botão Scan para + atualizar a lista de compiladores disponíveis. Use o botão + Match para encontrar a melhor + correspondência. + + @@ -1324,6 +1330,26 @@ + + + Status Bar + + A barra de status exibe informações úteis sobre o arquivo + atual, servidor atual, compilador e destino. + + + + + + Você pode selecionar os itens que deseja exibir clicando com o + botão direito do mouse na barra de status. Marque as caixas dos + itens que você deseja exibir. + + + + + diff --git a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml index 78e566d428b..a7a0825a59d 100644 --- a/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml +++ b/docs/PT_BR/HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml @@ -164,6 +164,19 @@ Processa todas as inclusões + + -I, --include-path + + Locais para procurar arquivos ESDL incluídos. Eles + podem ser caminhos absolutos ou relativos. Se precisar + especificar vários diretórios, você pode usar várias opções -I + ou usar uma única entrada com os diretórios separados pelo + caractere separador de ambiente. Para Linux, use dois pontos + (:) e para Windows, use ponto e vírgula (;). Os caminhos + também podem ser definidos usando uma variável de + ambiente--ESDL_INCLUDE_PATH. + + -v|--verbose @@ -204,7 +217,7 @@ - + @@ -265,6 +278,19 @@ destino (gerado) – deve ser um ECL válido. + + -I, --include-path + + Locais para procurar arquivos ESDL incluídos. Eles + podem ser caminhos absolutos ou relativos. Se precisar + especificar vários diretórios, você pode usar várias opções -I + ou usar uma única entrada com os diretórios separados pelo + caractere separador de ambiente. Para Linux, use dois pontos + (:) e para Windows, use ponto e vírgula (;). Os caminhos + também podem ser definidos usando uma variável de + ambiente--ESDL_INCLUDE_PATH. + + Output @@ -638,6 +664,19 @@ ESDL + -I, --include-path + + + Locais para procurar arquivos ESDL incluídos. Eles + podem ser caminhos absolutos ou relativos. Se precisar + especificar vários diretórios, você pode usar várias opções + -I ou usar uma única entrada com os diretórios separados + pelo caractere separador de ambiente. Para Linux, use dois + pontos (:) e para Windows, use ponto e vírgula (;). Os + caminhos também podem ser definidos usando uma variável de + ambiente--ESDL_INCLUDE_PATH. + + -s, --server diff --git a/docs/PT_BR/HPCCClientTools/CT_Mods/ECLCC.xml b/docs/PT_BR/HPCCClientTools/CT_Mods/ECLCC.xml index e9c5dda17ba..bbfcd6021b5 100644 --- a/docs/PT_BR/HPCCClientTools/CT_Mods/ECLCC.xml +++ b/docs/PT_BR/HPCCClientTools/CT_Mods/ECLCC.xml @@ -1,4 +1,4 @@ - + @@ -16,22 +16,33 @@ - Sua opinião e comentários sobre este documento são muito bem-vindos e podem ser enviados por e-mail para docfeedback@hpccsystems.com Inclua a frase - Feedback sobre documentação na linha de assunto e indique o nome do documento, o número das páginas e número da versão atual no corpo da mensagem. - - LexisNexis e o logotipo Knowledge Burst são marcas comerciais registradas da Reed Elsevier Properties Inc., usadas sob licença. Os demais produtos, logotipos e serviços podem ser marcas comerciais ou registradas de suas respectivas empresas. Todos os nomes e dados de exemplo usados neste manual são fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é mera coincidência. + Sua opinião e comentários sobre este documento são muito + bem-vindos e podem ser enviados por e-mail para + docfeedback@hpccsystems.com Inclua a frase Feedback sobre documentação na linha de assunto e + indique o nome do documento, o número das páginas e número da versão + atual no corpo da mensagem. + + LexisNexis e o logotipo Knowledge Burst são marcas comerciais + registradas da Reed Elsevier Properties Inc., usadas sob licença. Os + demais produtos, logotipos e serviços podem ser marcas comerciais ou + registradas de suas respectivas empresas. Todos os nomes e dados de + exemplo usados neste manual são fictícios. Qualquer semelhança com + pessoas reais, vivas ou mortas, é mera coincidência. - © 2015 HPCC Systems®. Todos os direitos reservados. + © 2015 HPCC Systems®. Todos os + direitos reservados. HPCC Systems® - 2015 HPCC Systems®. Todos os direitos reservados. + 2015 HPCC Systems®. Todos os direitos + reservados. @@ -44,9 +55,16 @@ <emphasis role="bold">Compilador ECL</emphasis> - O compilador ECL é o componente compilador do HPCC. Ele é incorporado e incluído no momento da instalação do HPCC. O compilador é o componente responsável pela compilação do código ECL. + O compilador ECL é o componente compilador do HPCC. Ele é + incorporado e incluído no momento da instalação do HPCC. O compilador é o + componente responsável pela compilação do código ECL. - A sintaxe e várias opções do compilador implementadas são semelhantes ao compilador gcc. A versão do eclcc pode ser executada tanto em Linux quanto Windows; quando executada, carrega vários dos seus objetos compartilhados (arquivos do SO (OS) no Linux) ou DLLs (no Windows). O compilador ECL é capaz de processar código ECL hThor, Thor ou Roxie. + A sintaxe e várias opções do compilador implementadas são + semelhantes ao compilador gcc. A versão do eclcc pode ser executada tanto + em Linux quanto Windows; quando executada, carrega vários dos seus objetos + compartilhados (arquivos do SO (OS) no Linux) ou DLLs (no Windows). O + compilador ECL é capaz de processar código ECL hThor, Thor ou + Roxie. @@ -62,7 +80,10 @@ - Para compilar e executar o código ECL localmente em sua máquina Windows, é preciso ter o compilador Microsoft Visual Studio 2008 C++ (edição Express ou Professional). Ele está disponível em Para compilar e executar o código ECL localmente em sua + máquina Windows, é preciso ter o compilador Microsoft Visual + Studio 2008 C++ (edição Express ou Professional). Ele está + disponível em http://www.microsoft.com/express/Downloads/#2008-Visual-CPP @@ -100,9 +121,20 @@ <emphasis>Utilizando o Compilador ECL como opção Stand Alone </emphasis> - O compilador ECL é geralmente usado por meio do ECL IDE ou Eclipse, com o plugin ECL para Eclipse; porém, é possível usar o compilador ECL de forma independente para criar programas ou workunits também independentes. O compilador ECL pode ler o código ECL a partir da entrada padrão ou de um arquivo de entrada especificado. Ele compila o código em um programa executável (como o arquivo 'EXE' no Windows). O programa resultante, quando executado, realiza a tarefa e grava os resultados no local padrão. Alternativamente, o resultado poderia ser redirecionado para um arquivo ou canal em outro processo. Com o compilador ECL, você não precisa de um cluster de supercomputador para desenvolver e executar códigos ECL . - - Executar o compilador ECL sem nenhuma opção (ou especificar --ajuda) exibirá a sintaxe. + O compilador ECL é geralmente usado por meio do ECL IDE ou + Eclipse, com o plugin ECL para Eclipse; porém, é possível usar o + compilador ECL de forma independente para criar programas ou workunits + também independentes. O compilador ECL pode ler o código ECL a partir da + entrada padrão ou de um arquivo de entrada especificado. Ele compila o + código em um programa executável (como o arquivo 'EXE' no Windows). O + programa resultante, quando executado, realiza a tarefa e grava os + resultados no local padrão. Alternativamente, o resultado poderia ser + redirecionado para um arquivo ou canal em outro processo. Com o + compilador ECL, você não precisa de um cluster de supercomputador para + desenvolver e executar códigos ECL . + + Executar o compilador ECL sem nenhuma opção (ou especificar + --ajuda) exibirá a sintaxe. C:\eclcc>eclcc -help @@ -123,43 +155,55 @@ -I <path> - Adiciona um caminho aos locais para procurar por importações ecl + Adiciona um caminho aos locais para procurar por + importações ecl -L <path> - Adiciona um caminho aos locais para procurar por bibliotecas do sistema + Adiciona um caminho aos locais para procurar por + bibliotecas do sistema -o <file> - Especifica o nome do arquivo de resultado (padrão “a.out” se vinculado a um executável ou stdout) + Especifica o nome do arquivo de resultado (padrão + “a.out” se vinculado a um executável ou stdout) -manifest - Especifica um caminho para manifestar os recursos de listagem do arquivo a serem adicionados + Especifica um caminho para manifestar os recursos de + listagem do arquivo a serem adicionados -checkDirty - Faz com que o eclcc gere um aviso para qualquer atributo que tenha sido modificado (conforme o resultado do status git) O uso dessa função exige que o git esteja instalado e disponível no caminho. + Faz com que o eclcc gere um aviso para qualquer + atributo que tenha sido modificado (conforme o resultado do + status git) O uso dessa função exige que o git esteja + instalado e disponível no caminho. -foption[=value] - Define uma opção ecl. Ver #OPTION em Referência de Linguagem ECL para obter detalhes. + Define uma opção ecl. Ver #OPTION em + Referência de Linguagem ECL para obter + detalhes. -main <ref> - Compila definição <ref> da coleção de origem. + Compila definição <ref> da fonte especificada - + observe o suporte estendido do repositório Git (consulte + "Git Support" na + seção anterior). @@ -201,7 +245,9 @@ - OBSERVAÇÃO: Se houver espaços no caminho que você especificar, coloque-os em aspas. Por exemplo: -L"C:\Program Files" + OBSERVAÇÃO: Se houver + espaços no caminho que você especificar, coloque-os em aspas. + Por exemplo: -L"C:\Program Files" @@ -221,7 +267,8 @@ -E - Resultado ECL pré-processado na forma de arquivo xml + Resultado ECL pré-processado na forma de arquivo + xml @@ -239,19 +286,22 @@ -Me - eclcc deve avaliar o código ecl fornecido em vez de gerar uma workunit + eclcc deve avaliar o código ecl fornecido em vez de + gerar uma workunit -q - Salva o texto da consulta ECL como parte da workunit + Salva o texto da consulta ECL como parte da + workunit -wu - Gera informações de workunit somente em arquivo xml + Gera informações de workunit somente em arquivo + xml @@ -299,7 +349,8 @@ -Dname=value - Substitui a definição do “nome” global do atributo + Substitui a definição do “nome” global do + atributo @@ -323,13 +374,15 @@ -save-cpps - Não remove arquivos c++ gerados (implícito se tiver -g) + Não remove arquivos c++ gerados (implícito se tiver + -g) -shared - Gera objeto compartilhado da workunit em vez de um executável independente + Gera objeto compartilhado da workunit em vez de um + executável independente @@ -351,32 +404,47 @@ --allow=str - Permite o recurso de nomeação (e.g., cpp, pipe, all)cpp: Permite código incorporado no ECL (p.ex., c++, JAVA, Javascript, Python, R, etc.)pipe: Permite que o comando PIPE envie dados para um programa externo.all: Permite todos os recursos + Permite o recurso de nomeação (e.g., cpp, pipe, + all)cpp: Permite + código incorporado no ECL (p.ex., c++, JAVA, Javascript, + Python, R, etc.)pipe: Permite que o comando PIPE envie + dados para um programa externo.all: Permite todos os + recursos -b - Modo Batch. Cada arquivo de origem é processado sucessivamente. O nome do resultado depende do nome do arquivo de entrada + Modo Batch. Cada arquivo de origem é processado + sucessivamente. O nome do resultado depende do nome do arquivo + de entrada -checkVersion - Habilita/desabilita verificação da versão ecl dos arquivos + Habilita/desabilita verificação da versão ecl dos + arquivos --deny=all - Não permite o uso de todos os recursos nomeados que não foram especificados como permitidos usando – allow + Não permite o uso de todos os recursos nomeados que não + foram especificados como permitidos usando – allow --deny=str Não permite o uso do recurso nomeadocpp: Não permite o código incorporado no ECL (p.ex., c++, JAVA, Javascript, Python, R, etc.)pipe: Não permite que o comando PIPE envie dados para um programa externo. + role="bold">cpp: Não permite o código incorporado + no ECL (p.ex., c++, JAVA, Javascript, Python, R, + etc.)pipe: Não + permite que o comando PIPE envie dados para um programa + externo. @@ -400,13 +468,15 @@ --legacy - Usa semântica de importação antiga (descontinuada) + Usa semântica de importação antiga + (descontinuada) --keywords - Gera as listas de palavras reservadas do ECL para stdout (formato XML) + Gera as listas de palavras reservadas do ECL para + stdout (formato XML) @@ -424,19 +494,22 @@ -specs <file> - Lê as configurações do eclcc de um arquivo específico + Lê as configurações do eclcc de um arquivo + específico -split m:n - Processa um subconjunto m de n arquivos de entrada (apenas com a opção -b) + Processa um subconjunto m de n arquivos de entrada + (apenas com a opção -b) -v --verbose - Exibe informações adicionais de rastreamento no momento da compilação + Exibe informações adicionais de rastreamento no momento + da compilação @@ -460,7 +533,9 @@ Opções Compiladas: - Após ter compilado o código com sucesso, ele gerará um arquivo executável. Algumas opções adicionais podem ser usadas ao executar esse executável. + Após ter compilado o código com sucesso, ele gerará um arquivo + executável. Algumas opções adicionais podem ser usadas ao executar esse + executável. Uso: a.out <options> @@ -476,7 +551,8 @@ -wu=<file> - Grava workunits formatadas em XML para um determinado arquivo e sai + Grava workunits formatadas em XML para um determinado + arquivo e sai @@ -510,30 +586,37 @@ Exemplos - O exemplo a seguir demonstra o que pode ser feito quando o compilador ECL estiver instalado e em operação. + O exemplo a seguir demonstra o que pode ser feito quando o + compilador ECL estiver instalado e em operação. - Executando um programa básico ECL utilizando o compilador por linha de comando + Executando um programa básico ECL utilizando o compilador por + linha de comando - Quando o compilador ECL estiver instalado, você pode usá-lo (compilador ECL) para executar um programa ECL . + Quando o compilador ECL estiver instalado, você pode usá-lo + (compilador ECL) para executar um programa ECL . - Crie um arquivo chamado hello.ecl, e digite o seguinte:Output('Hello world'); + Crie um arquivo chamado hello.ecl, e digite o + seguinte:Output('Hello world'); (Incluindo as aspas). - Você pode usar o editor de sua preferência ou a linha de comando digitando o seguinte (para sistemas Windows): + Você pode usar o editor de sua preferência ou a linha de + comando digitando o seguinte (para sistemas Windows): echo Output('Hello world'); > hello.ecl - Em um sistema Linux, seria preciso mudar alguns caracteres como segue: + Em um sistema Linux, seria preciso mudar alguns caracteres + como segue: echo "Output('Hello world');" > hello.ecl - Use o compilador ECL para compilar o programa adicionando o seguinte comando: + Use o compilador ECL para compilar o programa adicionando o + seguinte comando: eclcc hello.ecl @@ -544,7 +627,8 @@ - Um arquivo executável será criado e poderá ser executado da seguinte maneira: + Um arquivo executável será criado e poderá ser executado da + seguinte maneira: Em sistema Linux digite: @@ -553,7 +637,12 @@ Em sistema Windows digite: - a.outIsso irá gerar o resultado "Hello world" (sem as aspas) na saída std, sua janela de terminal neste exemplo. Você pode redirecionar ou transferir o resultado para um arquivo ou programa desejado. Este simples exemplo verificará se o compilador está funcionando adequadamente. + a.outIsso irá gerar o + resultado "Hello world" (sem as aspas) na saída std, sua janela de + terminal neste exemplo. Você pode redirecionar ou transferir o + resultado para um arquivo ou programa desejado. Este simples + exemplo verificará se o compilador está funcionando + adequadamente. @@ -561,9 +650,14 @@ Compilar com Opções - Após ter verificado que o compilador ECL está funcionando de forma adequada, você pode tentar usar algumas das opções. Uma dessas variações pode especificar a opção -o que nos permite inserir um nome de arquivo de resultado mais significativo: Hello. + Após ter verificado que o compilador ECL está funcionando de + forma adequada, você pode tentar usar algumas das opções. Uma dessas + variações pode especificar a opção -o que nos permite inserir um nome + de arquivo de resultado mais significativo: Hello. - eclcc -oHello hello.eclIsso gera um arquivo de nome "Hello", que agora pode ser executado a partir da linha de comando. + eclcc -oHello hello.eclIsso + gera um arquivo de nome "Hello", que agora pode ser executado a partir + da linha de comando. Em sistema Linux digite: @@ -572,11 +666,15 @@ Em sistema Windows digite: - HelloIsso resultará na exibição do seguinte. + HelloIsso resultará na + exibição do seguinte. Hello world - Existem opções adicionais que podem ser usadas ao executar esse arquivo. Usando nosso programa Hello como exemplo, podemos executá-lo com uma opção para gerar um resultado diferente. Essa opção seria -xml, que gera o resultado em um formato XML . + Existem opções adicionais que podem ser usadas ao executar esse + arquivo. Usando nosso programa Hello como exemplo, podemos executá-lo + com uma opção para gerar um resultado diferente. Essa opção seria + -xml, que gera o resultado em um formato XML . Em sistema Linux digite: @@ -591,7 +689,8 @@ <Dataset name="Result 1"><Row><Result_1>Hello world</Result_1></Row></Dataset> - O exemplo a seguir fornece um valor definido especificado para o compilador: + O exemplo a seguir fornece um valor definido especificado para o + compilador: //file named hello2.ecl IMPORT ^ as repo; OUTPUT(repo.optionXX); diff --git a/docs/PT_BR/HPCCSpark/SparkHPCC.xml b/docs/PT_BR/HPCCSpark/SparkHPCC.xml index e4d4eddc413..c866f3a85c8 100644 --- a/docs/PT_BR/HPCCSpark/SparkHPCC.xml +++ b/docs/PT_BR/HPCCSpark/SparkHPCC.xml @@ -3,7 +3,7 @@ "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> - HPCC / Integração com Spark + HPCC / Conector do Spark @@ -59,451 +59,6 @@ - - HPCC / Instalação e Configuração com Spark - - O plug-in Spark do HPCC Systems, hpccsystems-plugin-spark integra o - Spark a sua plataforma HPCC Systems. Uma vez instalado e configurado, o - componente Sparkthor gerencia o cluster Spark Integrado. Ele configura, - inicia e interrompe dinamicamente o cluster do Spark Integrado ao iniciar - ou interromper a plataforma do HPCC Systems. - - - Instalação do Spark - - Para adicionar a integração do Spark ao seu cluster HPCC System, - você deve ter um cluster HPCC executando a versão 7.0.0 ou posterior. O - Java 8 também é necessário. Você precisará configurar o componente - Sparkthor. O componente Sparkthor precisa estar associado a um cluster - Thor existente válido. Os nós de trabalho do Spark serão criados ao lado - de cada nós de trabalho Thor. O nó do Integrated Spark Mananger será - designado durante a configuração, junto com quaisquer outros recursos do - nó do Spark. Em seguida, o componente Sparkthor gerará um cluster Spark - Integrado na inicialização. Você também terá um conector jar SPARK-HPCC - disponível. - - Para obter o componente Spark Integrado, os pacotes e plug-ins - estão disponíveis no portal do HPCC Systems®: - https://hpccsystems.com/download/ - - Faça o download do pacote hpccsystems-plugin-spark no Portal do - HPCC Systems. - - - Instalando o Plug-in Spark - - O processo de instalação e o pacote a ser feito o download - variam de acordo com o sistema operacional que você planeja usar. Os - pacotes de instalação não serão instalados com sucesso se suas - dependências não estiverem presentes no sistema de destino. Para - instalar o pacote, siga as instruções de instalação apropriadas para o - seu sistema operacional: - - - CentOS/Red Hat - - Para sistemas baseados em RPM, você pode instalar utilizando o - yum. - - sudo yum install <hpccsystems-plugin-spark> - - - - Ubuntu/Debian - - Para instalar um pacote Ubuntu/Debian, use: - - sudo dpkg -i <hpccsystems-plugin-spark> - - Após instalar o pacote, execute o seguinte para atualizar - quaisquer dependências. - - sudo apt-get install -f - - - - Você precisa copiar e instalar o plug-in em todos os nós. - Isso pode ser feito usando o script install-cluster.sh fornecido - com o HPCC. Use o comando a seguir: - - sudo /opt/HPCCSystems/sbin/install-cluster.sh <hpccsystems-plugin-spark> - - Mais detalhes, incluindo outras opções que podem ser - usadas com este comando, estão incluídos no apêndice Instalando - e executando a plataforma HPCC, também disponível no portal da - web HPCC Systems® . - - - - - - - - Configuração do Spark - - Para configurar seu HPCC System para integrar o Spark, instale o - pacote hpccsystems-plugin-spark e modifique o ambiente existente - (arquivo) para adicionar o componente Sparkthor. - - - - Caso esteja em execução, pare o HPCC System usando este - comando em uma janela de terminal: - - - - - - - - - - - - - - - - Este comando pode ser usado para confirmar que os - processos do HPCC foram interrompidos: - sudo systemctl status hpccsystems-platform.target - - - - - - - - - Inicie o serviço do Gerenciador de - Configurações.sudo /opt/HPCCSystems/sbin/configmgr - - - - - - - Deixe esta janela aberta. Se desejar, você pode - minimizá-la. - - - - Usando um navegador de Internet, acesse a interface do - Gerenciador de Configurações: - - http://<node ip >:8015 - - - - Marque a caixa Advanced View e selecione o arquivo de ambiente - a ser editado. - - - - Ative o acesso de gravação (caixa de seleção na parte superior - direita da página) - - - - Clique com o botão direito no painel Navigator no lado - esquerdo. - - Escolher Novos componentes, - em seguida, escolha - Sparkthor - - - - - - Configure os atributos da sua instância do Spark: - - - - - - - - - - - - - - atributo - - descrição - - default - - obrigatório - - - - - - name - - Nome para este processo - - mysparkthor - - obrigatório - - - - ThorClusterName - - Cluster Thor para se conectar a* - - mythor* - - obrigatório - - - - SPARK_EXECUTOR_CORES - - Número de núcleos para executores - - 1 - - opcional - - - - SPARK_EXECUTOR_MEMORY - - Memória por executor - - 1G - - opcional - - - - SPARK_MASTER_WEBUI_PORT - - Porta base a ser usada para a interface web - principal - - 8080 - - opcional - - - - SPARK_MASTER_PORT - - Porta base a ser usada pela principal - - 7077 - - opcional - - - - SPARK_WORKER_CORES - - Número de núcleos para workers - - 1 - - opcional - - - - SPARK_WORKER_MEMORY - - Memória por worker - - 1G - - opcional - - - - SPARK_WORKER_PORT - - Porta base a ser usada para os workers - - 7071 - - opcional - - - - - - *ThorClusterName segmenta um cluster Thor existente. Ao - configurar, você deve escolher um cluster Thor válido existente para - o cluster Spark Integrado espelhar. - - - - - - - - - - - - - - OBSERVAÇÃO: Você deve deixar pelo menos dois - núcleos abertos para o HPCC fornecer o Spark com dados. O - número de núcleos e memória alocados para o Spark - dependerá da carga de trabalho. Não tente alocar muitos - recursos para o Spark, onde você poderia ter problemas com - o HPCC e o Spark conflitando em busca de recursos. - - - - - - - - Especifique um Nó Principal do Spark; Selecione a aba - Instances. Clique com o botão direito do mouse na tabela Instances e - escolha Add Instances - - Adicione a instância do nó principal do Spark. - - - - - - - - - - - - - - OBSERVAÇÃO: Você só pode ter uma instância - principal do Spark - - - - - - - - Salve o arquivo do ambiente. Saia do configmgr (Ctrl+C). Copie - o arquivo de ambiente do diretório de origem para o diretório - /etc/HPCCSystems. - - - - - - - - - - - - - - Certifique-se de que o sistema não esteja em - execução antes de tentar mover o arquivo - environment.xml. - - - - - - sudo cp /etc/HPCCSystems/source/<new environment file.xml> -/etc/HPCCSystems/environment.xml e distribua o arquivo do - ambiente para todos os nós em seu cluster - - Você pode optar por usar o script hpcc-push.sh fornecido para - implantar o novo arquivo de ambiente. Por exemplo: - - sudo /opt/HPCCSystems/sbin/hpcc-push.sh -s <sourcefile> -t <destinationfile> - - - - Agora você pode iniciar seu cluster HPCC Systems e verificar se o - Sparkthor está ativo. - - - - Para iniciar seu sistema HPCC. - - - - Usando um navegador, navegue para a sua instância do Spark's - Manager (a instância que você adicionou acima) em execução na porta 8080 - do seu HPCC Systems. - - Por exemplo, http: //nnn.nnn.nnn.nnn: 8080, em que nnn.nnn.nnn.nnn - é o endereço IP do nó do Integrated Spark Manager. - - https://192.168.56.101:8080 - - - Opções de configuração Cluster Integrado do Spark. - - Além das opções de configuração disponíveis através do - gerenciador de configuração do HPCC Systems, existem opções para casos - extremos e configurações mais avançadas. Para customizar seu ambiente - de cluster do Spark Integrado para utilizar essas opções adicionais, - use o script spark-env.sh fornecido - . - - /etc/HPCCSystems/externals/spark-hadoop/spark-env.sh - - Para obter mais informações sobre as opções do Spark Cluster, - consulte as páginas a seguir. - - - - https://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts - - - - https://spark.apache.org/docs/latest/configuration.html#environment-variables - - - - - Exemplo de Casos de Uso - - - - O Spark atualmente requer que o Java 8 seja executado. Em - um sistema em que a instalação padrão do Java não é o Java 8. A - variável de ambiente JAVA_HOME pode ser usada para definir a - versão do Spark Java para o Java 8. - - - - Geralmente, quando um job é executado em um cluster Spark, - ele assume a propriedade de todos os nós de trabalho. Em um - ambiente de cluster compartilhado, isso pode não ser o ideal. - Usando o atributo SPARK_MASTER_OPTS é possível definir um limite - para o número de nós de workers que um job pode utilizar. - - - - - - - O conector Spark HPCC Systems @@ -560,7 +115,8 @@ O conector distribuído Spark-HPCCSystems também suporta o PySpark. Ele usa as mesmas classes/API que o Java. - + + @@ -570,18 +126,36 @@ - - - Como é comum na comunicação do cliente Java por - TLS, os conectores Spark-HPCC direcionados a um cluster HPCC - por TLS precisarão importar os certificados apropriados para o - keystore Java local. *Uma maneira de - fazer isso é usar o keytool fornecido com as instalações Java. - Consulte a documentação do keytool para uso. + + + + + + Como é comum na comunicação do cliente Java por TLS, + os conectores Spark-HPCC direcionados a um cluster HPCC por + TLS precisarão importar os certificados apropriados para o + keystore Java local. + + + + *Uma maneira de fazer isso é usar o keytool fornecido + com as instalações Java. Consulte a documentação do keytool + para uso. + - + + + + + Integração Spark + + O plug-in Spark integrado ao HPCC não é mais compatível a partir + da versão 9.0.0 em favor de clusters Spark autônomos gerenciados pelo + usuário vinculados à plataforma HPCC usando o conector + Spark-HPCC. + Considerações Especiais @@ -602,43 +176,6 @@ isunsigned. - - - Suporte Spark no ECL Watch - - Como parte dos HPCC Systems, o conector Spark pode ser - monitorado a partir da interface ECL Watch. Consulte a seção - ECL Watch consulte o manual Como usar o ECL Watch - para obter mais detalhes. - - O cluster do SparkThor é - listado na página Servidores do Sistema do ECL Watch. Para acessar a - página Systems Servers: - - - - No ECL Watch, clique no ícone/link de operações - - - - Clique na aba System Servers - - - - - - Isso informa informações para o nó principal do cluster Spark - integrado. Aqui você pode verificar se o cluster está ativo e em - execução e executar a verificação prévia selecionando o cluster do - SparkThor e pressionando o botão Submit na parte inferior da - página. - - Clique no ícone do disco ao lado do cluster do SparkThor para - acessar seus registros. - - Clique no ícone azul de informações para visualizar informações - mais integradas do cluster do Spark. - @@ -736,7 +273,8 @@ throws Exception { Example Python code: - # Connect to HPCC and read a file + + # Connect to HPCC and read a file df = spark.read.load(format="hpcc", host="127.0.0.1:8010", password="", @@ -755,11 +293,13 @@ df.write.save(format="hpcc", password="", username="", cluster="mythor", - path="example::file") + path="example::file") + Exemplo de código Scala: - // Read a file from HPCC + + // Read a file from HPCC val dataframe = spark.read.format("hpcc") .option("host","127.0.0.1:8010") .option("password", "") @@ -775,11 +315,13 @@ val dataframe = spark.read.format("hpcc") .option("password", "") .option("username", "") .option("cluster","mythor") - .save("example::file") + .save("example::file") + Exemplo de código R: - df <- read.df(source = "hpcc", + + df <- read.df(source = "hpcc", host = "127.0.0.1:8010", path = "example::file", password = "", @@ -794,7 +336,8 @@ write.df(df, source = "hpcc", mode = "overwrite", password = "", username = "", - fileAccessTimeout = 240) + fileAccessTimeout = 240) + @@ -859,162 +402,14 @@ write.df(df, source = "hpcc", RemapInfo é fornecido como um parâmetro. - - Exemplos - - Vamos percorrer os dois exemplos abaixo, utilizando um ambiente - Spark. Além disso, o repositório fornece programas de teste (na pasta - DataAccess/src/test) que podem ser executados como exemplos stand-alone. -   - - Esses programas de teste devem ser executados a partir de um IDE - de desenvolvimento, como o Eclipse, por meio do aplicativo Spark-submit, - enquanto os exemplos abaixo são dependentes do shell do Spark. - - Os exemplos a seguir assumem um Spark Shell. Você pode usar o - comando spark-submit se você pretende compilar e empacotar esses - exemplos. Para conectar corretamente seu shell ao cluster Spark - Integrado , forneça os seguintes parâmetros ao iniciá-lo: - - bin/spark-shell \ - --master=<spark://{remotesparkhost-IP}:{sparkport}> - --conf="spark.driver.host={localhost-ip}" - - - Iris_LR - - Este exemplo pressupõe que você tenha o Spark Shell em execução. - O próximo passo é estabelecer o seu HpccFile e seu RDD para esse - arquivo. Você precisa do nome do arquivo, do protocolo (http ou - https), do nome ou IP do ESP, da porta do ESP (normalmente 8010) e da - sua conta de usuário e senha. O valor sc é o - objeto SparkContext fornecido pelo shell. - - val espcon = new Connection("http", "myeclwatchhost", "8010"); - espcon.setUserName("myuser"); - espcon.setPassword("mypass"); - val file = new HpccFile("myfile",espcon); - - - Agora temos um RDD dos dados. Na verdade, nada aconteceu nesse - ponto porque o Spark executa uma avaliação lenta e ainda não há nada - para acionar uma avaliação. - - O Spark MLLib possui um pacote de regressão logística. A - Regressão Logística MLLib espera que os dados sejam fornecidos como - registros formatados em Ponto Rotulado. Isso é comum em implementações - de treinamento supervisionado no MLLib. Precisamos de rótulos de - coluna, então criamos uma matriz de nomes. Em seguida, fazemos um RDD - de ponto rotulado a partir do nosso RDD. Isso também é apenas uma - definição. Finalmente, definimos a Regressão Logística que queremos - executar. Os nomes das colunas são os nomes dos campos na definição de - registro ECL do arquivo, incluindo o nome “class”, que é o nome do - campo que contém o código de classificação. - - val names = Array("petal_length","petal_width", "sepal_length", - "sepal_width") - var lpRDD = myRDD.makeMLLibLabeledPoint("class", names) - val lr = new LogisticRegressionWithLBFGS().setNumClasses(3) - - A próxima etapa é definir o modelo, que é uma ação e fará com - que o Spark avalie as definições. - - val iris_model = lr.run(lpRDD) - - Agora nós temos um modelo. Utilizaremos esse modelo para pegar o - dataset original e usar o modelo para produzir novos rótulos. A - maneira correta de fazer isso é ter amostrado aleatoriamente alguns - dados em espera. Vamos usar o conjunto de dados original porque é mais - fácil mostrar como usar o conector. Em seguida, pegamos nossos dados - originais e usamos uma função de mapa definida em linha para criar um - novo registro com nosso valor de previsão e a classificação - original. - - val predictionAndLabel = lpRDD.map { - case LabeledPoint(label, features) => - val prediction = iris_model.predict(features) - (prediction, label) - } - - A classe MulticlassMetrics agora pode ser - usada para produzir uma matriz de confusão. - - val metrics = new MulticlassMetrics(predictionAndLabel) - metrics.confusionMatrix - + Fornecemos alguns exemplos de utilização de um ambiente Spark. Os + exemplos fornecidos dependem do shell Spark.. - - Dataframe_Iris_LR - - O Dataframe_Iris_LR é semelhante ao Iris_LR, exceto que um - Dataframe é usado e as novas classes do ML Spark são usadas em vez das - antigas classes MLLib. Como o ML não está completamente pronto, - voltamos para uma classe MLLib para criar nossa matriz de - confusão. - - Uma vez que o shell Spark é criado, precisamos das classes de - importação. - - import org.hpccsystems.spark.HpccFile - import org.apache.spark.sql.Dataset - import org.apache.spark.ml.feature.VectorAssembler - import org.apache.spark.ml.classification.LogisticRegression - import org.apache.spark.mllib.evaluation.MulticlassMetrics - - O próximo passo é estabelecer o objeto - HpccFile e criar o Dataframe. O - valor do spark é um objeto - SparkSession fornecido pelo shell e é usado em - vez do objetoSparkContext . - - val espcon = new Connection("http", "myeclwatchhost", "8010"); - espcon.setUserName("myuser"); - espcon.setPassword("mypass"); - val file = new HpccFile("myfile",espcon); - - - As classes de aprendizado de máquina do Spark - ml usam classes de contêiner de dados diferentes. - No caso da Regressão Logística, precisamos transformar nossas linhas - de dados em uma linha com uma coluna chamada "recursos" contendo os - recursos e uma coluna chamada "rótulo" contendo o rótulo de - classificação. Lembre-se de que nossa linha tem “class”, - “sepal_width”, “sepal_length”, “petal_width” e “petal_length” como os - nomes das colunas. Esse tipo de transformação pode ser realizado com - uma classe VectorAssembler . - - val assembler = new VectorAssembler() - assembler.setInputCols(Array("petal_length","petal_width", - "sepal_length", "sepal_width")) - assembler.setOutputCol("features") - val iris_fv = assembler.transform(my_df) - .withColumnRenamed("class", "label") - - Agora que os dados (iris_fv) estão prontos, - definimos nosso modelo e ajustamos os dados. - - val lr = new LogisticRegression() - val iris_model = lr.fit(iris_fv) - - Agora queremos aplicar nossa previsão e avaliar os resultados. - Como observado anteriormente, usaríamos um dataset de validação para - realizar a avaliação. Nós vamos ser preguiçosos e apenas usar os dados - originais para evitar a tarefa de amostragem. Usamos a função - transform(…) para o modelo para adicionar a - previsão. A função adiciona uma coluna chamada "previsão" e define um - novo conjunto de dados. A nova implementação de Aprendizado de Máquina - não possui capacidade de métricas para produzir uma matriz de - confusão, portanto, vamos pegar nosso dataset com a coluna de - previsão e criar um novo RDD com um conjunto de - dados para uma classe MulticlassMetrics. - - val with_preds = iris_model.transform(iris_fv) - val predictionAndLabel = with_preds.rdd.map( - r => (r.getDouble(r.fieldIndex("prediction")), - r.getDouble(r.fieldIndex("label")))) - val metrics = new MulticlassMetrics(predictionAndLabel) - metrics.confusionMatrix - - + Você pode encontrar exemplos no repositório do Github: + + + https://github.com/hpcc-systems/Spark-HPCC/tree/master/Examples + diff --git a/docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml b/docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml index 17c8e55c823..0972e3bd257 100644 --- a/docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml +++ b/docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml @@ -484,34 +484,34 @@ Hardware Thor - Nós escravos Thor exigem um equilíbrio adequado de CPU, memória + Nós secundários Thor exigem um equilíbrio adequado de CPU, memória RAM, rede e E/S de disco para operar da maneira mais eficiente. Um único - nó escravo do Thor funciona de maneira ideal quando alocado em 4 núcleos - de CPU, 8GB de memória RAM, I/O de rede de 1Gb/segundo e + nó secundário do Thor funciona de maneira ideal quando alocado em 4 + núcleos de CPU, 8GB de memória RAM, I/O de rede de 1Gb/segundo e leitura/gravação de disco sequencial de 200MB/segundo. A arquitetura de hardware pode oferecer valor superior dentro de um único servidor físico. Em tais casos, é possível usar múltiplos - escravos para configurar seus servidores físicos maiores de modo a - executar múltiplos nós de escravos Thor por servidor físico. + secundários para configurar seus servidores físicos maiores de modo a + executar múltiplos nós de secundários Thor por servidor físico. É importante observar que HPCC, por natureza, é um sistema de - processamento paralelo e que todos os nós de escravos Thor serão + processamento paralelo e que todos os nós de secundários Thor serão executados precisamente ao mesmo tempo Desta forma, ao alocar mais de um - escravo HPCC Thor por máquina física, verifique se cada escravo atende - aos requisitos recomendados. + secundário HPCC Thor por máquina física, verifique se cada secundário + atende aos requisitos recomendados. Por exemplo, em sua eficiência ideal, 1 servidor físico com 48 núcleos, 96GB de memória RAM, I/O de rede de 10Gb/segundo e sequencial - de 2GB/segundo seria capaz de executar dez (10) escravos HPCC Thor . A - ordem para otimização do uso de recursos em um nó escravo Thor é I/O de - disco de 60%, rede de 30% e CPU de 10%. Qualquer aumento na I/O + de 2GB/segundo seria capaz de executar dez (10) secundários HPCC Thor . + A ordem para otimização do uso de recursos em um nó secundário Thor é + I/O de disco de 60%, rede de 30% e CPU de 10%. Qualquer aumento na I/O sequencial terá o maior impacto sobre a velocidade, seguido por melhorias na rede e, depois, por melhorias na CPU. A arquitetura de rede também é algo importante a ser considerado. Os nós HPCC Thor funcionam idealmente em uma arquitetura de rede - dinamizada entre todos os processos escravos Thor. + dinamizada entre todos os processos secundários Thor. RAID é recomendado e todos os níveis de RAID adequados para operações de leitura/gravação sequencial e alta disponibilidade são @@ -1115,10 +1115,17 @@ Environment.conf - Outro componente da configuração do HPCC System é o arquivo - enviroment.conf. O environment.conf contém algumas definições globais - que o gerenciador de configuração usa para configurar o HPCC System. Na - maioria dos casos, os padrões são suficientes. + Um componente dos sistemas HPCC na configuração bare-metal é o + arquivo enviroment.conf. O environment.conf contém algumas definições + globais que o gerenciador de configuração usa para configurar o HPCC + System. Na maioria dos casos, os padrões são suficientes. + + O arquivo environment.conf funciona apenas para implantações + bare-metal. Para implantações de contêiner ou nuvem, o environment.conf + não é válido; em vez disso, há configurações de ambiente que podem ser + definidas definindo valores nos gráficos do Helm. Consulte a + documentação HPCC Systems em contêineres para implantações em + contêineres ou em nuvem. @@ -1162,27 +1169,27 @@ ## Default environment configuration file for OpenHPCC [DEFAULT] -configs=/etc/HPCCSystems -path=/opt/HPCCSystems -classpath=/opt/HPCCSystems/classes -runtime=/var/lib/HPCCSystems -lock=/var/lock/HPCCSystems -# Supported logging fields: -# AUD,CLS,DET,MID,TIM,DAT,PID,TID,NOD,JOB,USE,SES,COD,MLT,MCT,NNT,COM,QUO,PFX,ALL,STD -logfields=TIM+DAT+MLT+MID+PID+TID+COD+QUO+PFX -pid=/var/run/HPCCSystems -log=/var/log/HPCCSystems -user=hpcc -group=hpcc +configs=${CONFIG_DIR} +path=${INSTALL_DIR} +classpath=${INSTALL_DIR}/classes +runtime=${RUNTIME_PATH} +lock=${LOCK_PATH} +# Supported logging fields: AUD,CLS,DET,MID,TIM,DAT,PID,TID,NOD,JOB,USE,SES,COD,MLT,MCT,NNT,COM,QUO,PFX,ALL,STD +logfields=TIM+DAT+MLT+MID+PID+TID+COD+QUO+PFX+AUD +pid=${PID_PATH} +log=${LOG_PATH} +user=${RUNTIME_USER} +group=${RUNTIME_GROUP} #umask=022 #nice=0 -home=/home -environment=environment.xml -sourcedir=/etc/HPCCSystems/source -blockname=HPCCSystems +home=${HOME_DIR} +environment=${ENV_XML_FILE} +sourcedir=${CONFIG_SOURCE_PATH} +blockname=${DIR_NAME} interface=* # enable epoll method for notification events (true/false) use_epoll=true +#epoll_hdlperthrd=10 # allow kernel pagecache flushing where enabled (true/false) allow_pgcache_flush=true # report UDP network stats @@ -1191,34 +1198,28 @@ mpStart=7101 mpEnd=7500 mpSoMaxConn=128 mpTraceLevel=0 -# enable SSL for dafilesrv remote file access -# (SSLNone/false | SSLOnly/true | SSLFirst | UnsecureFirst) +# enable SSL for dafilesrv remote file access (SSLNone/false | SSLOnly/true | SSLFirst | UnsecureFirst) # Enabling requires setting the HPCCPassPhrase, HPCCCertFile, and HPCCPrivateKeyFile values #dfsUseSSL=SSLNone #Specify location of HPCC PKI public/private key files # note: if HPCCPassPhrase specified it must be encrypted #HPCCPassPhrase= -#HPCCCertificateFile=/home/hpcc/.ssh/cert.cer -#HPCCPublicKeyFile=/home/hpcc/.ssh/id_rsa.pub -#HPCCPrivateKeyFile=/home/hpcc/.ssh/id_rsa +#HPCCCertificateFile=${HOME_DIR}/${RUNTIME_USER}/certificate/certificate.pem +#HPCCPublicKeyFile=${HOME_DIR}/${RUNTIME_USER}/certificate/public.key.pem +#HPCCPrivateKeyFile=${HOME_DIR}/${RUNTIME_USER}/certificate/key.pem jvmoptions=-XX:-UsePerfData #Options to enable remote debugging of Java service or application #jvmoptions=-XX:-UsePerfData -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=2000 #JNI_PATH=/absolute/path/to/alternative/libjvm.so -# Although HPCC platform includes plugins for both Python2 and Python3, -# only one may be safely enabled at a time -# as the Python libraries export the same symbols for both versions. -# Enabling both may lead to unpredicatable results -# including segfaults or undefined symbol errors. -# -# If you would prefer to use python 2 and disable python3, change the line below to read -# additionalPlugins=python2 +# Python plugins can call python cleanup code on exit, but this seems to cause lockups in some Tensorflow examples +# In most cases, skipping the cleanup is harmless and avoids these lockups +skipPythonCleanup=true # # Multiple paths can be specified (separate with :, or ; on Windows). -# Relative paths are assumed to be relative to /opt/HPCCSystems/versioned +# Relative paths are assumed to be relative to ${INSTALL_DIR}/versioned additionalPlugins=python3 # To en-/disable Drop Zone restriction. @@ -1232,8 +1233,8 @@ useDropZoneRestriction=true #dafsConnectRetries=2 #dafsMaxReceiveTimeSeconds=0 -# Dafilesrv: set to change number of seconds before retrying an unresponsive dafilesrv -# (default 10 seconds) +# Dafilesrv: set to change number of seconds before retrying an unresponsive dafilesrv (default 10 seconds) + # NB: for now this only applies to the last cached server #dafsConnectFailRetrySeconds=10 @@ -1271,6 +1272,18 @@ lock=/var/lock/HPCCSystems Alguns outros itens usados ou indicados no environment.conf + + deploymentName + + + Cria uma variável de ambiente em uma implantação + bare-metal que pode ser recuperada usando a função integrada + ECL--GETENV(). + + deploymentName: myenv1 + + + Use_epoll @@ -1322,18 +1335,49 @@ lock=/var/lock/HPCCSystems adequados para o seu sistema. #enable SSL for dafilesrv remote file access -dfsUseSSL=true -dfsSSLCertFile=/certfilepath/certfile -dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o dfsUseSSL=true e o valor dos caminhos para - indicar os caminhos do arquivo de certificado e do arquivo chave em - seu sistema. Em seguida, implemente o arquivo +#HPCCPassPhrase=true +HPCCCertFile=/certfilepath/certfile +HPCCPrivateKeyFile=/keyfilepath/keyfile + Defina o dfsUseSSL=true e o + valor dos caminhos para indicar os caminhos do arquivo de certificado + e do arquivo chave em seu sistema. Em seguida, implemente o arquivo environment.conf (e os arquivos de certificado/chave) em todos os nós conforme apropriado. + + + Note: + + + HPCCPassPhrase deve ser deixado como comentário, a menos + que uma senha tenha sido usada para criar as chaves. + + + + Quando o dafilesrv for ativado para TLS (porta 7600), ele ainda pode se conectar por uma conexão sem TLS (porta 7100) para permitir que clientes legados funcionem. + + + Key file Additional + Information + + As chaves privada e pública precisam ser geradas no formato + PEM. Os mesmos pares de arquivos de chaves devem ser instalados no + cluster. Essas chaves devem. + + Os valores HPCCCertFile e HPCCPublicKeyFile devem existir e + ser descomentados no arquivo environment.conf conforme indicado + acima. O HPCCPassPhrase é usado apenas quando uma senha for + utilizada na criação das chaves. + + Uma boa maneira de garantir a implementação apropriada dos + arquivos de chave segura é, conforme documentado no manual Installing & Running the HPCC Systems + Platform e usar o script + install-cluster.sh. + @@ -1411,14 +1455,6 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - - sudoersBasedn - - - Obsoleto. - - - workunitsBasedn @@ -1430,9 +1466,78 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - + + Ferramentas de Sistema e Controles + + + Comando de Controles + + Existem comandos de controle que podem ser executados por meio + da CLI ecl, que passa pelo ESP para + encaminhar os comandos de controle aos componentes no back-end. + + + Roxie Memlock Status em Nós Individuais + + O comando ecl roxie + getmemlocked ecl CLI é uma maneira de verificar se a + memória Roxie está bloqueada. Se você quiser verificar bloqueios em + nós Roxie individuais e se puder acessar esses nós. Use o + comando: + + $ cat /proc/`pidof roxie`/status | grep VmLck + + Que retorna algo como: + + VmLck:   5242880 kB + + Se o valor VmLck for 0, a memória não está bloqueada. + + O valor VmLck deve corresponder à linha de log + memsize=roxie: + + 00000015 PRG 2022-07-07 12:10:35.754 77841 77841 "RoxieMemMgr: 20480 Pages successfully allocated + - memsize=5368709120 base=0x7f904fe00000 alignment=262144 bitmapSize=640 + + Que é encontrado na configuração RoxieCluster do + environment.xml ou na seção Helm chart -- values.yaml Roxie para + totalMemoryLimit: + +     totalMemoryLimit="5368709120" + + + + Resource Limits + + Há também um limite de recursos definido por padrão no momento + da instalação que aumenta a quantidade de memória que pode ser + bloqueada: + + hpcc soft memlock unlimited + + e + + hpcc hard memlock unlimited + + Sem isso, o limite não será grande o suficiente para bloquear + os tamanhos de memória usados por um Roxie típico. + + Você pode também verificar os limites com um comando + shell: + + ulimit -l + + Tenha certeza que executar esse comando como um + usuáriohpcc. + + + + + + + Redefinindo nós em um Cluster Thor @@ -1774,46 +1879,149 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - Múltiplos Thor - - É possível executar múltiplos Thors em um mesmo hardware físico. - Os múltiplos Thors em um mesmo hardware são independentes e não sabem - da existência do outro. Os Thors executam jobs à medida em que os - recebem, independentemente do que os outros estejam fazendo. A - velocidade de uma única tarefa nunca será superior com múltiplos - Thors, porém a produtividade poderá ser maior. É possível executar - duas tarefas de coleta de Thors a partir de duas filas diferentes ou - em uma mesma fila. - - A desvantagem de executar múltiplos Thors no mesmo hardware é - que a memória física nos nós precisa ser compartilhada entre cada um - dos Thors. Isso precisa ser configurado segundo a definição de cluster - Thor. - - Não é possível colocar múltiplos Thors em um hardware que não - possua núcleos de CPU suficientes para suportá-los. Você não deve ter - uma quantidade maior de Thors em relação ao número de núcleos. Uma boa - regra é usar uma fórmula na qual o número de núcleos divido por dois - equivale ao número máximo de clusters Thor a ser usado. - - - Múltiplos nós - - Se possível, tente manter os recursos em execução nos seus - próprios nós para um ou múltiplos clusters Thor. Se estiver - executando algum tipo de alta disponibilidade ativa/passiva, não - mantenha seu Master ativo e passivo no mesmo nó. Tente manter o Dali - e o ESP em nós separados. Mesmo que você não possa se dar ao luxo de - ter diversos nós, recomenda-se que o Thor Master e o Dali (no - mínimo) estejam em nós separados. A boa prática é manter o máximo de - componentes possível em seus próprios nós. - - Outra consideração para um sistema de múltiplos nós é evitar - colocar qualquer um dos componentes em nós com escravos. Essa não é - uma boa prática por acarretar em um cluster desequilibrado, - resultando em escravos com menos memória/CPU que são mais lentos do - que os demais e, consequentemente, reduzindo o desempenho de todo o - cluster. + Múltiplos Thors + + Você pode executar vários Thors no mesmo hardware físico. + Múltiplos Thors no mesmo hardware são independentes e desconhecem uns + aos outros. Os Thors executam os trabalhos conforme os recebem, + independentemente de o que o(s) outro(s) está(ão) fazendo. A + velocidade de um único job nunca será ser mais rápida com vários + Thors, mas a taxa de transferência pode ser. Você pode correr executar + dois Thors pegando jobs de duas filas diferentes ou da mesma + fila. + + A desvantagem de executar vários Thors no mesmo hardware é que a + memória física nos nós precisa ser compartilhada entre cada um os + Thors. Isto precisa ser configurado para cada cluster Thor. + + Vários Thors no mesmo cluster exigem que eles compartilhem a + mesma compilação e instalação. O ambiente define cada cluster Thor, + que pode compartilhar o mesmo conjunto de máquinas. Existem + configurações de porta primária e secundária que precisam ser + definidas para evitar conflitos. Há também considerações e + configurações de compartilhamento/divisão de memória que precisam ser + feitas. + + + + + + + + Configurações + + Descrição + + + + globalMemorySize + + A memória máxima que um processo secundário pode + usar. Normalmente, 85 por cento da memória do sistema + dividido pelo número total de secundários em execução no + hardware em todos os Thors. + + + + localThorPortInc + + Este valor é o incremento da porta base da + secundária. + + + + masterMemorySize + + A memória máxima que um Thor master por usar. Se + deixar será usado o valor de + globalMemorySize. + + + + masterport + + Este valor deve ser único entre instâncias Thor que + são executadas no hardware. + + + + name + + O nome de cada instância Thor deve ser único. + + + + nodeGroup + + Este valor está associado com arquivos publicados por + esta instância Thor. Normalmente é deixado em branco e o + padrão é o mesmo do nome do atributo. + Em ambientes com múltiplos Thors compartilhando o mesmo + grupo de nós, o nome de cada Thor deve + ser diferente. De qualquer maneira, o + nodeGroup de todos os Thors que + compartilham os mesmos físicos devem ter o mesmo nome. É + muito importante manter o nodeGroup + igual ao nome da instância Thor. + + + + slaveport + + Este valor deve ser único entre instâncias Thor + executadas no mesmo hardware. + + + + SlavesPerNode + + O número de nós secundários por instância + Thor. + + + + + + Você não deve colocar vários Thors em hardware que não tenha + núcleos de CPU suficientes para suportá-lo. Você não deve ter mais + Thors do que o número de núcleos. Uma boa regra é usar uma fórmula em + que o número de núcleos dividido por dois é o número máximo de + clusters Thor a serem usados. + + + Separate Worker Nodes + + Em uma implantação bare-metal, tente o máximo possível para + manter os recursos de cluster de destino do sistema em execução em + seus próprios nós físicos ou partições. A ideia é evitar colocar + componentes essenciais do sistema nas mesmas partições que os dados + de cluster altamente variáveis e intensivos em recursos. Outra + condição de tipo semelhante pode ocorrer, se você estiver executando + algum tipo de alta disponibilidade ativa/passiva. Nesse caso, não + mantenha seus gerenciadores ativos e passivos no mesmo nó. Tente + manter Dali e ESP em odes separados. Mesmo que você não tenha o luxo + de muitos nós físicos, você ainda deseja separar os jobs Thor e o + Dali (no mínimo) para estar em discos separados ou partições dos nós + físicos. Thor pode ter tamanhos de dados variados e expansivos e não + é incomum que esses dados ocupem a maior parte da capacidade + disponível nessa partição, ou mesmo toda ela. Se o armazenamento de + metadados Dali estiver compartilhando a mesma partição de disco que + os dados do Thor do cluster e ocorrer uma condição de espaço em + disco insuficiente, como "sem espaço em disco", os metadados do Dali + poderão ser corrompidos. + + Ao longo dessas mesmas linhas, tenha cuidado com os nós de + jobs Thor e tente evitar colocar quaisquer outros componentes do + sistema em nós com os jobs. Isso não seria ideal e levaria a um + cluster desequilibrado. O resultado é que os workers que + compartilham recursos com menos memória/cpu disponíveis levam mais + tempo do que os outros e, como resultado, arrastam todo o desempenho + do cluster para baixo. @@ -1823,8 +2031,8 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o + indica que está aguardando se conectar aos secundários. Você pode + então ter problemas com a configuração do daemon SSH. Há um recurso de segurança chamado "AllowUsers" que cria uma lista de permissões @@ -1888,13 +2096,14 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o <emphasis role="strong">Virtual Thor - escravos</emphasis> + secundários - Virtual Thor escravos + Virtual Thor secundários A partir da versão 6.0.0, os clusters Thor podem ser configurados de forma a obter todos os benefícios oferecidos pelos - recursos disponíveis por nó ao usar os escravos Thor virtuais. + recursos disponíveis por nó ao usar os secundários Thor + virtuais. Nas versões do HPCC anteriores à 6.0.0, as configurações de cluster eram normalmente definidas para um número N de Defina o , onde N é igual ou próximo ao número de núcleos por máquina. - Isso resultou em N processos de escravo independentes por nó, + Isso resultou em N processos de secundário independentes por nó, como visto abaixo: @@ -1915,41 +2124,42 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - Cada processo de escravo nessa configuração tem uma mesma + Cada processo de secundário nessa configuração tem uma mesma divisão fixa da memória física disponível ao nó. - Os escravos não compartilham memória RAM ou outros + Os secundários não compartilham memória RAM ou outros recursos. - Os escravos transmitem mensagens através da interface de + Os secundários transmitem mensagens através da interface de loopback para se comunicarem. - Atualmente emprega-se uma nova abordagem, na qual os escravos - virtuais são criados com um único processo de escravo, como mostrado - abaixo: + Atualmente emprega-se uma nova abordagem, na qual os secundários + virtuais são criados com um único processo de secundário, como + mostrado abaixo: Nesta configuração, cada nó físico possui um único processo - de escravo Thor. + de secundário Thor. - Cada processo de escravo possui N escravos virtuais. Isso é - configurado através da opção de configuração do Thor denominada - channelsPerSlave + Cada processo de secundário possui N secundários virtuais. + Isso é configurado através da opção de configuração do Thor + denominada channelsPerSlave channelsPerSlave . - Nessa arquitetura, escravos no mesmo processo podem se comunicar - diretamente entre si e compartilhar recursos. + Nessa arquitetura, secundários no mesmo processo podem se + comunicar diretamente entre si e compartilhar recursos. @@ -1961,12 +2171,12 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - Cada escravo virtual compartilha recursos em cache, como + Cada secundário virtual compartilha recursos em cache, como chaves de páginas de indexação, etc. - Os escravos podem solicitar e compartilhar toda a memória + Os secundários podem solicitar e compartilhar toda a memória RAM disponível. @@ -1993,12 +2203,12 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - Transmite um dataset de RHS escravo local para todos os - outros escravos. + Transmite um dataset de RHS secundário local para todos os + outros secundários. - Todos os escravos reúnem o RHS global em uma única + Todos os secundários reúnem o RHS global em uma única tabela. @@ -2008,7 +2218,7 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - Depois que todos os escravos estão prontos, o LHS é + Depois que todos os secundários estão prontos, o LHS é transmitido e avaliado em relação à tabela hash para produzir os resultados unidos. @@ -2031,19 +2241,19 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfileDefina o - As vantagens de uma configuração do Thor com escravo virtual - para o código ECL usando o LOOKUP/SMART JOIN são que, na prática, - ele terá N vezes mais memória antes de falhar ou aplicar o fail over - no caso do SMART JOIN. + As vantagens de uma configuração do Thor com secundário + virtual para o código ECL usando o LOOKUP/SMART JOIN são que, na + prática, ele terá N vezes mais memória antes de falhar ou aplicar o + fail over no caso do SMART JOIN. Ele também é mais rápido: em vez de transmitir o RHS local - para o processo de N escravos por nó, ele precisa realizar esta - comunicação para apenas um. Esse único escravo pode compartilhar - diretamente a mesma tabela e o mesmo HT com os outros escravos + para o processo de N secundários por nó, ele precisa realizar esta + comunicação para apenas um. Esse único secundário pode compartilhar + diretamente a mesma tabela e o mesmo HT com os outros secundários virtuais. As principais vantagens de - um LOOKUP/SMART JOIN em uma configuração do Thor com escravo + um LOOKUP/SMART JOIN em uma configuração do Thor com secundário virtual: diff --git a/docs/PT_BR/HPCCSystemAdmin/SA-Mods/CassandraWUServer.xml b/docs/PT_BR/HPCCSystemAdmin/SA-Mods/CassandraWUServer.xml deleted file mode 100644 index 342f8c5f8ac..00000000000 --- a/docs/PT_BR/HPCCSystemAdmin/SA-Mods/CassandraWUServer.xml +++ /dev/null @@ -1,518 +0,0 @@ - - - - Utilizando o Cassandra para armazenamento de Workunit. - - A partir da versão 6.0.0, é possível configurar seu sistema para usar - o banco de dados Cassandra da Apache para - armazenamento de workunits. O Cassandra NoSQL data store da Apache é um - framework de software com licença gratuita que suporta aplicações de - distribuição intensa de dados. - - A configuração padrão do HPCC continua idêntica – as Workunits são - armazenadas no data store do Dali e o Sasha é normalmente configurado para - arquivar Workunits em disco a fim de economizar o uso de memória. - - Alternar para o armazenamento de Workunits no Cassandra elimina a - necessidade de arquivá-las e permite que você gerencie seus dados de forma - independente. - - Esta seção detalha as etapas para configurar a plataforma HPCC a usar - Cassandra como um servidor de Workunits. - - - Cassandra como um servidor Workunit - - Prós e contras - - - - - - - - - - Dali - - Cassandra - - - - - - Armazenamento no Dali não requer trabalho ou instalação - adicional de software - - Exige a instalação e a configuração de um servidor - Cassandra - - - - Sasha fornece serviço de limpeza simples - - Exige sua própria organização e manutenção - - - - Limitado pela memória do Dali - - Ilimitado (escalabilidade elástica) - - - - Workunits arquivadas são difíceis de acessar, devem ser - restauradas antes que o resultado seja visto - - Não é necessário arquivar, de forma que todas as workunit - permanecer "em tempo real" - - - - Localização única - - Distribuído, escalonável e altamente disponível. - - - - Backup único de dados suportados. Fail over - manual - - Tolerância a falhas inerente com replicação de dados, - projetada para alta disponibilidade. - - - - - - - - Instalação e Visão Geral da Configuração - - - - Instale o Cassandra e configure-o como desejar. Os únicos - requisitos para trabalhar com uma plataforma HPCC são: - - - - Crie um keyspace para usar para o armazenamento das - workunits no Cassandra. O padrão é hpcc. - - - - Se quiser segurança, é necessário configurar a - autenticação do Cassandra e criar um superusuário para o HPCC - usar. Essas credenciais precisam então ser inseridas na - configuração do DaliPlugin no Gerenciador de - Configurações. - - - - Verifique se é possível acessar o servidor Cassandra - pelos nós do HPCC . - - - - Conheça as configurações do Cassandra (IP, porta, - keyspace, credenciais de usuário etc.) - - - - - - Use o Gerenciador de Configurações para definir a plataforma - HPCC para usar o Cassandra para armazenamento das Workunits. - - - - Certifique-se de que o Cassandra esteja sendo - executado. - - Depois de ter configurado o HPCC para usar o Cassandra para - armazenamento das workunits, é necessário garantir que o Cassandra - esteja em execução antes de iniciar o sistema. - - - - Force o arquivo environment.xml e reinicie a plataforma - HPCC. - - - - Se possuir Workunits existentes, exporte-as do Dali e - importe-as no Cassandra usando a wutool. - - - - Se possuir Workunits arquivadas e quiser ativá-las, importe-as - para o Cassandra. - - - - Depois que as Workunits forem armazenadas no armazém de - Workunits do Cassandra, o Sasha não vai mais arquivar - Workunits (independentemente das configurações que possa - ter) - - - - Quaisquer Workunits previamente arquivadas permanecerão - armazenadas no servidor Sasha e continuarão disponíveis da - mesma forma que antes. - - - - - - - - Configure sua plataforma para utilizar o Cassandra para o - armazenamento de Workunit - - Essa opção é configurada ao adicionar um componente DaliPlugin ao - seu sistema. - - - Conectar-se ao Gerenciador de Configurações (Configuration - Manager) - - Para alterar a configuração para os componentes do HPCC , - conecte-se ao Configuration Manager. - - - - Pare todos os componentes do HPCC se estiverem em - execução. - - - - Verifique se eles não estão mais sendo executados. É possível - usar um único comando, como: sudo /opt/HPCCSystems/sbin/hpcc-run.sh -a hpcc-init status - - - - Inicie o Gerenciador de Configurações. - - sudo /opt/HPCCSystems/sbin/configmgr - - - - Conecte seu navegador de Internet à interface da Web do - Gerenciador de Configurações. - - (usando o URL - http://<configmgr_IP_Address>:8015, onde - <configmgr_IP_Address> , é o endereço IP - do nó que está executando o Gerenciador de Configuração) - - - - Selecione o botão Advanced - View . - - - - Use a lista suspensa para selecionar o arquivo de configuração - XML adequado. - - Observação: - - - Gerenciador de Configurações. nunca funciona no arquivo de - configurações ativo. Após terminar a edição, será necessário - copiar o arquivo environment.xml para o local ativo e - forçá-lo a todos os nós. - - - - - - - Marque a caixa de seleção Write - Access . - - O acesso padrão é somente leitura. Muitas opções estão - disponíveis apenas quando o acesso à gravação estiver - ativado. - - - - - - - - Adicionando o componente DaliServerPlugin - - O DaliServerPlugin controla suas opções de armazenamento de - workunits no Cassandra. - - - - Clique com o botão direito no Painel de Navigator e selecione New Components no menu pop-up; em seguida, - selecione DaliServerPlugin no menu - pop-up. - - - - - - - - Insira as propriedades do DaliServerPlugin : - - - - - - Preencha a aba Attributes com as configurações - adequadas de seu Cassandra Server existente. - - - - - - Adicione opções na aba Options. - - - - Observação: - - - O nome de usuário e senha são necessários apenas - caso seu servidor Cassandra esteja configurado para - exigir credenciais. - - - - - - - Clique no ícone de disco para salvar. - - - - - - Copie o novo arquivo xml do diretório de origem para - /etc/HPCCSystems e renomeie o arquivo para environment.xml - - # for example sudo cp /etc/HPCCSystems/source/NewEnvironment.xml - /etc/HPCCSystems/environment.xml - - - - - - - - - - - - - - Certifique-se de que você possua direitos - suficientes para gravar arquivos no diretório de destino - antes de copiar. Se solicitado a substituir o arquivo de - destino, responda yes. - - - - - - - - Copie o arquivo /etc/HPCCSystems/environment.xml para - /etc/HPCCSystems/ em cada nó. - - É possível criar um script para distribuir o arquivo XML para - todos os nós. Um script de amostra é fornecido com o HPCC. Os - comandos a seguir copiam os arquivos XML para todos os nós como - exigido: - - sudo /opt/HPCCSystems/sbin/hpcc-push.sh <sourcefile> <destinationfile> - - - - - Reinicie o HPCC System em todos os nós. - - - - - - - <emphasis role="bold">Utilizando o wutool </emphasis> - - wutool - wutool - action [WUID=nnn ] [ DALISERVER=ip | - CASSANDRASERVER=ip] [option=value] - - O wutool é um utilitário de linha de comando usado para manter seu - armazenamento das workunits. Ele pode ser encontrada em - /opt/HPCCSystems/bin/ em qualquer servidor onde a plataforma tenha sido - instalada. É possível usar esse utilitário para exportar suas Workunits de - um servidor Dali e depois importar para um data storage do Cassandra. - Também é possível usá-lo para importar workunits arquivadas em um servidor - Sasha. - - - - - - - - - - Ações - - - - - - list <workunits> - - Listar Workunits - - - - dump <workunits> - - Descarregar o xml para Workunits especificadas. - - - - delete <workunits> - - Remover Workunits. - - - - results <workunits> - - Descarregar resultados para as workunits - especificadas. - - - - archive <workunits> - - Arquivar Workunits especificadas em arquivos xml. Há - suporte para as seguintes opções: [TO=<directory>] - [DEL=1] [DELETERESULTS=1] - [INCLUDEFILES=1] - - - - restore <filenames> - - Restaurar a partir de arquivos xml. - [INCLUDEFILES=1] - - - - orphans - - Remover informações órfãs do armazenamento - - - - cleanup [days=NN] - - Remover Workunits com mais de NN dias - - - - validate - - Verificar se há erros no conteúdo do repositório de - Workunits. [FIX=1] tentará reparar quaisquer problemas - encontrados. - - - - clear - - Remover todo o repositório da workunit (exige entire=1 - repository=1) - - - - initialize - - Inicializar o novo repositório de workunit - - - - - - <workunits> pode ser especificado na linha de comando ou - usando um filter owner=XXXX. Se omitido, todas as workunits são - selecionadas. - - - - - - - - - - Opções (Essas - opções são válidas se o CASSANDRASERVER estiver - especificado) - - - - - - CASSANDRA_KEYSPACE - - Keyspace do Cassandra, o padrão é HPCC. - - - - CASSANDRA_USER - - Nome de usuário do Cassandra a ser usado (se - necessário). - - - - CASSANDRA_PASSWORD - - Senha do Cassandra a ser usada (se necessário). - - - - TRACELEVEL - - Trace level (1-10) - - - - Exemplos: - - /opt/HPCCSystems/bin/wutool archive DALISERVER=. del=1 - -/opt/HPCCSystems/bin/wutool restore *.xml -CASSANDRASERVER=192.168.56.120 CASSANDRA_KEYSPACE=hpcc2 - - diff --git a/docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml b/docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml index 2612fdf01d5..0ffc40b1f86 100644 --- a/docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml +++ b/docs/PT_BR/HPCCSystemAdmin/SA-Mods/WUTool.xml @@ -1,22 +1,19 @@ - - <emphasis role="bold">Utilizando o wutool </emphasis> + <emphasis role="bold">Utilizando wutool </emphasis> wutool wutool action [WUID=nnn ] [ DALISERVER=ip | - CASSANDRASERVER=ip] [option=value] + role="bold">[WUID=nnn ] [ DALISERVER=ip ] + [option=value] - A wutool é um utilitário de linha de comando usado para manter seu - armazenamento das workunits. Ela pode ser encontrada em - /opt/HPCCSystems/bin/ em qualquer servidor onde a plataforma tenha sido - instalada. É possível usar esse utilitário para exportar suas Workunits de - um servidor Dali e depois importar para um data storage do Cassandra Também - é possível usá-la para importar workunits arquivadas em um servidor - Sasha. + O wutool é um utilitário de linha de comando usado para manter o + armazenamento de Workunit. Ele pode ser encontrado em /opt/HPCCSystems/bin/ + em qualquer servidor onde a plataforma foi instalada. Você pode usá-lo para + importar workunits arquivadas em um servidor Sasha. @@ -26,7 +23,7 @@ - Ações + Actions @@ -35,33 +32,32 @@ list <workunits> - Listar Workunits + Lista workunits. dump <workunits> - Descarregar o xml para Workunits especificadas. + Dump de xml para workunits específicas. delete <workunits> - Remover Workunits. + Exclui workunits. results <workunits> - Descarregar resultados para as workunits - especificadas. + Dump de resultados de uma workunit específica. archive <workunits> - Arquivar Workunits especificadas em arquivos xml. Há suporte - para as seguintes opções: [TO=<directory>] + Arquiva as workunits especificadas em arquivos xml. As + seguintes opções são suportadas:[TO=<directory>] [DEL=1] [DELETERESULTS=1] [INCLUDEFILES=1] @@ -69,95 +65,49 @@ restore <filenames> - Restaurar a partir de arquivos xml. [INCLUDEFILES=1] + Restaura de arquivo xml. [INCLUDEFILES=1] orphans - Remover informações órfãs do armazenamento + Exclui informações isoladas do armazenamento cleanup [days=NN] - Remover Workunits com mais de NN dias + Exclui workunits mais velhas que NN dias validate - Verificar se há erros no conteúdo do repositório de - Workunits. [FIX=1] tentará reparar quaisquer problemas - encontrados. + Verifique o conteúdo do repositório da workunit quanto a + erros. [FIX=1] will try to repair any issues found. clear - Remover todo o repositório da workunit (exige entire=1 + Exclui todo o repositório de workunit (requerees entire=1 repository=1) initialize - Inicializar o novo repositório de workunit + Inicializa o respositório de uma nova workunit - <workunits> pode ser especificado na linha de comando ou usando - um filter owner=XXXX. Se omitido, todas as workunits são - selecionadas. + <workunits> pode ser especificado por linha de comando ou por + meio do filtro=XXXX. Se omitido, todas as workunits são selecionadas. - - - - - - - - - Opções (Essas opções - são válidas se o CASSANDRASERVER estiver - especificado) - - - - - - CASSANDRA_KEYSPACE - - Keyspace do Cassandra, o padrão é HPCC. - - - - CASSANDRA_USER - - Nome de usuário do Cassandra a ser usado (se - necessário). - - - - CASSANDRA_PASSWORD - - Senha do Cassandra a ser usada (se necessário). - - - - TRACELEVEL - - Trace level (1-10) - - - - Exemplos: + Exemplo: /opt/HPCCSystems/bin/wutool archive DALISERVER=. del=1 - -/opt/HPCCSystems/bin/wutool restore *.xml CASSANDRASERVER=192.168.56.120 CASSANDRA_KEYSPACE=hpcc2 + diff --git a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UnityLauncher.xml b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UnityLauncher.xml deleted file mode 100644 index e73c5b84d38..00000000000 --- a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UnityLauncher.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - Unity Launcher Icon (Inicializador de Unidade) - - A plataforma do HPCC suporta o uso de um ícone do Inicializador de unidade Ubuntu (Unity Launcher). - - A partir de um ícone no Inicializador de unidade da versão do Ubunto para desktop, é possível iniciar, interromper, reiniciar ou consultar o status de um sistema de nó único instalado. - - - - Observação: - - - Atualmente, esse recurso é útil apenas em um sistema de nó único. As versões futuras podem vir a operar de outra forma e ser compatíveis com HPCC System®. - - - - - - <emphasis role="bold">Para adicionar o ícone:</emphasis> - - - - Use a busca no Dash Home para localizar o ícone da aplicação no HPCC Systems ®. - -
- Ícone da Aplicação HPCC. - - - - - - -
-
- - - - - Clique e arraste o ícone para a barra do Inicializador de Unidade. - -
- Inicializador de unidade - - - - - - -
-
- - - Solte-o na barra. - -
- - - - Observação: - - - Na versão 12.04 ou mais recente do Ubuntu é possível mover o ícone para qualquer posição na barra arrastando e soltando na posição desejada. - - - -
- - - <emphasis role="bold">Para Usar o Ícone:</emphasis> - - - - Clique no ícone com o botão direito e selecione a ação desejada no menu. - -
- Menu contextual - - - - - - -
-
- - - - - O resultado será exibido em uma janela do terminal. - -
- Resultados - - - - - - -
-
- - - Feche a janela ao terminar. - -
-
-
diff --git a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml index a28d71669a2..87b13636cd0 100644 --- a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml +++ b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml @@ -1978,6 +1978,129 @@ + + Segurança da Landing Zone + + Você pode definir opções de segurança adicionais na(s) Landing + Zone(s). A segurança no nível do recurso permite que você defina + permissões de acesso e o que os usuários ou grupos podem fazer lá. Landing + Zone Scope Security permite que você defina permissões em subpastas em uma + Landing Zone. Isso fornece um meio de conceder e negar permissão aos + usuários para áreas dentro de uma Landing Zone. + + + Autorização de Recurso da Landing Zone + + Lista a Landing Zone do HPCC System usando autorização de nível de + recurso: + + + + + + Lista/pesquisa arquivos de Dropzone + + FileSprayAccess - SecAccess_Read + + + + Spray de um arquivo de uma Dropzone + + FileSprayAccess - SecAccess_Write + + + + Despray de um arquivo para uma Dropzone + + FileDesprayAccess - SecAccess_Write + + + + Lê o conteúdo do arquivo de uma Dropzone + + FileIOAccess - SecAccess_Read + + + + Grava o conteúdo de um arquivo de uma Dropzone + + FileIOAccess - SecAccess_Write + + + + Upload de um arquivo para uma Dropzone utilizando o + ECLWatch: + + FileUploadAccess - SecAccess_Full + + + + Download de um arquivo de uma Dropzone utilizando o + ECLWatch + + FileSprayAccess - SecAccess_Full + + + + Para habilitar o acesso a um recurso, defina a + permissão de acordo. + + Isso pode ser um nível de segurança suficiente em alguns casos; no + entanto, restrições adicionais podem ser necessárias para proteger + determinados arquivos de determinados usuários ou grupos. Você pode usar + a segurança Landing Zone File Scope para fazer isso. + + + + Arquivo de Escopos da Landing Zone + + A autorização de nível de escopo de arquivo fornece um meio de + proteger o acesso a pastas dentro de uma Landing Zone. + + Um administrador de HPCC pode definir os escopos da landing zone + para cada pasta. + + Cada escopo é uma pasta de arquivo de uma Landing Zone + HPCC. + + Os escopos do arquivo Landing Zone podem ser definidos usando + ECLWatch para sistemas habilitados para segurança. + + Para criar uma novo escopo de Landing Zone, + vá para a página Security do ECL Watch, e clique em Permissões. + + Na aba Permissões, pressione o botão + Add. + + + + Escolha Escopos de arquivo na caixa de opção suspensa e, em + seguida, forneça um nome e, opcionalmente, uma descrição. + + + + + + Arquivo de Permissões da Landing Zone + + You can set the Landing Zone file permissions according to your + requirements. Access your new Landing Zone using the following + annotation: + + plane::{dropzone_name}::{folder_name}::{subfolder_name}::{subfolder_name}... + + Seu Administrador HPCC pode definir os direitos de acesso para + cada escopo para cada usuário HPCC ou grupo de usuários. + + + + + Controle de Acesso a Workunit diff --git a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml index 1e10a8cb9a9..1e1f4e9940b 100644 --- a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml +++ b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml @@ -32,8 +32,8 @@ LexisNexis e o logotipo Knowledge Burst são marcas comerciais registradas da Reed Elsevier Properties Inc., usadas sob licença. - SSystems® HPCC Systems® é uma marca - registrada da LexisNexis Risk Data Management Inc. + HPCC Systems® é uma marca registrada da + LexisNexis Risk Data Management Inc. Os demais produtos, logotipos e serviços podem ser marcas comerciais ou registradas de suas respectivas empresas. Todos os nomes e @@ -207,11 +207,6 @@ System:
- - Exemplo da Teoria dos - seis graus de Kevin Bacon - - Leia Como usar o Gerenciador de Configurações para aprender como configurar uma @@ -1410,11 +1405,6 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ O Tutorial de Dados - - O exemplo da Teoria dos seis - graus de separação de Kevin Bacon - - Ler Como usar o Gerenciador de Configurações para aprender como configurar uma @@ -1492,10 +1482,9 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ install-cluster.sh - install-cluster.sh [-k | -p - <directory>] [-n <value>] <package-name> - + install-cluster.sh + [-k | -p <directory>] [-n <value>] + <package-name> @@ -1545,7 +1534,7 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ qualquer usuário com permissões suficientes de execução. Porém, quando o nome do usuário e senha forem solicitados, você deve informar as credenciais de um usuário com direitos sudo suficientes para executar - comandos como administrador em todos os nós.
+ comandos como administrador em todos os nós.
Antes de usar esse script, você precisa ter criado e definido um arquivo environment.xml (usando o assistente ou o modo avançado do @@ -1585,7 +1574,7 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ - Exemplos: Este exemplo instala os pacotes da plataforma do HPCC nos nós @@ -1621,10 +1610,10 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ deploy-java-files.sh - deploy-java-files.sh [-c] - [-e] [-H <value>] [-n <value>] [-r] [-s <value>] [-t - <value>] [-u <value>] [-x] + deploy-java-files.sh + [-c] [-e] [-H <value>] [-n <value>] [-r] [-s + <value>] [-t <value>] [-u <value>] [-x] + @@ -1752,10 +1741,9 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ hpcc-push.sh - hpcc-push.sh [-s - <source>] [-t <target>] [-n <concurrent>] [-x] - + hpcc-push.sh + [-s <source>] [-t <target>] [-n + <concurrent>] [-x] @@ -1795,8 +1783,8 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ Esse script "envia" arquivos do nome do arquivo e do caminho de origem para o nome do arquivo e caminho de - destino de todos os endereços IP no ambiente.xml ativo. - + destino de todos os endereços IP no ambiente.xml + ativo.
Para usar esse script, as chaves ssh precisam estar configuradas de maneira adequada em todos os nós, sendo também necessário usar @@ -1815,9 +1803,9 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ hpcc-run.sh - hpcc-run.sh - [-c component] [-n concurrent] [-s] - [-S] {start|stop|restart|status} + hpcc-run.sh + [-c component] [-n concurrent] [-s] [-S] + {start|stop|restart|status} @@ -1863,7 +1851,7 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ como usuário do hpcc. Esse script executa um comando em todos os - endereços IP no arquivo ativo environment.xml. + endereços IP no arquivo ativo environment.xml. Os endereços IP foram definidos no momento da edição do ambiente no Gerenciador de Configurações. Esse script suporta todos os @@ -1897,10 +1885,9 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ update-keys - update-keys - [-s <secret_key> -p - <public_key>] [ -g ] [-n <number of concurrent - threads>] + update-keys + [-s <secret_key> -p <public_key>] [ -g ] [-n + <number of concurrent threads>] @@ -1965,7 +1952,7 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ sudo yum remove hpccsystems-platform - Ubuntu/Debian + Ubuntu/Debian sudo apt-get remove hpccsystems-platform @@ -1988,11 +1975,12 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ sudo systemctl dafilesrv@dafilesrv.service stop -sudo systemctl dafilesrv@dafilesrv.service start +init_start_thor--> @@ -2006,8 +1994,8 @@ init_start_thor--> systemd utilizadas pelo HPCC Systems. Continuaremos a apoiar o antigo estilo de chamada System V. init.d. - hpcc-init - [option] + hpcc-init + [option] command @@ -2162,10 +2150,6 @@ sudo /etc/init.d/hpcc-init -c esp start - - Executando o ECL IDE pela primeira vez @@ -2182,8 +2166,9 @@ sudo /etc/init.d/hpcc-init -c esp start Faça o download do msxml3.msi da Microsoft (Pacote de Serviço 7 ou mais recente). - http://www.microsoft.com/en-us/download/details.aspx?id=3988 + http://www.microsoft.com/en-us/download/details.aspx?id=3988 + @@ -2471,21 +2456,8 @@ add1(10); Python - A plataforma HPCC Systems suporta Python3 por padrão. Isto - inclui plugins para Python2 e Python3, mas apenas um pode ser ativado - com segurança por vez, enquanto as bibliotecas Python exportam o mesmo - símbolos para ambas as versões. A ativação de ambos pode levar a - imprevisibilidade resultados, incluindo falhas de segmentação ou - símbolo indefinido erros. - - Por padrão, o plugin Python2 está presente, mas desativado, e o - plugin Python3 está presente e ativado. Se você deseja usar o Python2 - modifique seu arquivo environment.conf de acordo com o exemplo no - arquivo. - - Um cluster atualizado a partir de uma versão mais antiga pode - não ter o entradas apropriadas no arquivo environment.conf que suporte - a versão do Python. + A plataforma HPCC Systems suporta Python3 e o plugin Python3 + está presente e habilitado. Python2 não é mais suportado. @@ -2543,12 +2515,8 @@ split_words('Once upon a time'); Para que o Python funcione corretamente, é importante que a -         versão do Python e do HPCC Systems esteja configurada - corretamente para suportar         a versão instalada do Python. Se - você ver a mensagem de erro "ld: cannot find --lpy2embed", é provável - que seu sistema esteja configurado para Python3.         Da mesma - forma, se você ver "ld: cannot find --lpy3embed", seu sistema está -         configurado para Python2. + versão do Python e o HPCC Systems sejam configurados corretamente para + oferecer suporte ao uso da versão instalada correta do Python. Opções de Escopo Python diff --git a/docs/PT_BR/RoxieReference/RoxieRefMods/directAccessToRoxie.xml b/docs/PT_BR/RoxieReference/RoxieRefMods/directAccessToRoxie.xml index 8c20094c2be..ae9aba67360 100644 --- a/docs/PT_BR/RoxieReference/RoxieRefMods/directAccessToRoxie.xml +++ b/docs/PT_BR/RoxieReference/RoxieRefMods/directAccessToRoxie.xml @@ -355,6 +355,71 @@ to /WsEcl/submit/query/RoxieTargetName/QueryName/expanded + + Log do Roxie e Níveis de Rastreamento + + Quando você executa uma consulta Roxie utilizando o WsECL, você + pode marcar a opção para solicitar o logging de informações da Roxie + para esta consulta. Também é possível indicar o nível do que deverá ser + ajustadao para que os logs sejam gravados. + + + + Marque a opção Capture Log Info. + para habilitar o rastreamneto no request. + + Opcionalmente, você pode especificar o nível de detalhamento + inserindo um número entre 1-10 na caixa Trace + Level. + + Além disso, a opção pode ser ativada nas propriedades da + Request: + + <addthis.1Request xmlns="urn:hpccsystems:ecl:addthis.1" log="true" traceLevel="10"> + + Log é retornado para a resposta SOAP: + + <Tracing> + <Log> + <Category>TRACE</Category> + <Channel>0</Channel> + <Time>0.001</Time> + <Prefix>10.239.20.60:9876 {7} </Prefix> + <Text>Executing graph graph1</Text> + </Log> +</Tracing> + + + + Log Cego + + Blind logging suppresses anything that might be potentially + sensitive or might contain Personally Identifiable Information (PII) + from being written to logs. This includes contents of rows, contents of + queries, and contents of fields. + + Você pode usar uma consulta para um log cego ativando a opção + “<_blind>” no request, ou ajustando o atributo “blind” no topo da + request para 1 ou verdade. + + </soap:Envelope> + <soap:Body> + <exampleRequest xmlns="urn:hpccsystems:ecl:example"> + <_blind>1</_blind> + <acctno>1111111</acctno> + </exampleRequest> + </soap:Body> +</soap:Envelope>ou + + <soap:Envelope> + <soap:Body> + <exampleRequest xmlns="urn:hpccsystems:ecl:example" blind=’1’> + <acctno>1111111</acctno> + </exampleRequest> + </soap:Body> +</soap:Envelope> + + Acesso RESTful Direto ao Roxie diff --git a/docs/PT_BR/images/CNTR-DestroyComplete.jpg b/docs/PT_BR/images/CNTR-DestroyComplete.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa6e33900201893d26e7b7526dda2217bca4ba61 GIT binary patch literal 97359 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≻V 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/CNTR-TerraVersion.jpg b/docs/PT_BR/images/CNTR-TerraVersion.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce78f27d5f16f57ccb7f3ac6906bb2bba40d8001 GIT binary patch literal 42960 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/CNTR_kubctlGetPodsRunning.jpg b/docs/PT_BR/images/CNTR_kubctlGetPodsRunning.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6ac1a1ff3434c0c0be18163bd7f7c13c1dfa43ae GIT binary patch literal 46076 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 F{{UKUhQa^< literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/CT_statusbar.jpg b/docs/PT_BR/images/CT_statusbar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94996ea90629b243614a0c17d1507582fedb9d0d GIT binary patch literal 42236 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/CT_statusbarConfig.jpg b/docs/PT_BR/images/CT_statusbarConfig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..85623dc200b0e1d9b2ed66a839da417881d7bcde GIT binary patch literal 33061 zcmeFZbzEG_nl8L>hd^+b#@*e62MtaLZXvh@2x%aJ1h)XeAwYoO+E{QWxVuAecWA!O z-uvv?XU>_KbMO7`@6I37EPAc3s;+wLEqU#!ewcn(1|BKPE6D?Jus>7SAMgMLsGiD6 zKcUvPvaoe@dgWweXXQq%V`t;@~9#SJ{n0q+4+BxDq1Bvce+6f{&+G)#OfObiT6 zVq83IdL_r!!3>cSknxJ)&-v@ASMfyPNuw-Kx^a(#B1&vh=xu`L`*_T z&%nsU%)-YnASfg(BKt&6UO`bw`I)wkuAaVup@pTDwT-RaOE-59Pp{YBKJVTK1%LP$ z5*i!#DLx_bb5in`?3~=MdHDt3Dk`h0Yaq3C^=<7Pon75My?vu&;}erp(=)Rxt842U zn_EA(caBd^&(1F{udZ)!VI;#NA|fE7{300+-V64RfQyJk!;Oq5t%+jh@|cz<02N;* zCab&^jgD9Ah``)+1f3AXw?cpXi|XHq{?}*@{NEz_Pn!QE`Jn~CMTH}UmqmbsQI89U zfD8993t%F^!9F110+PVx4Zs9s!uzBD_qriSDo(`do?2Gdq#Bf95;;`KxnsMItUw5e zZ#$(-rM3E`GqL_kGUmOBLG`FuX|%9JHZxWcunYwRcVc&mp9IdSzWcyaa_t!Md;`^#P6vcp zX5Q`G=1<}esu|BpSYMNJr=91LaxET2#YFc<<2TkCQ-TNL0O=$7Fk}-Z6V*+&9DN=OH9p@?Nj|a2*@>ZH(uR zI=HmHc|S`v_a|zHGL62GI%P=Y+dJ|%u&GKwcsK7I+EDKnzD6f52fWgNlR^UUfq%Q< z&JSS~H$sTCx)C2`d4pmCzcG=3;#vT=WMJUv0SIv)dUX8&%&5CA+01QvPsT|{%yfx$ zK0g!Zjq38}&;Na*7Z=Q{+gpKZJeOXknko=|ro&W1ppTLx>7{<`?@YY>2$Q#PcZ{jJ ze9ZK5n^<8=f7@^e)$Q?emkKh@ORvIXE8wySA6Vg=E&OD(ig693? zO3f7StlZv(2T{ZKNPjVuwfQ1#XXO|!&{k$nuhp5#QtErzK5ozUJy4GYN0MO~G@4F0-yQ1hw8+2~0pi|d`ORFwM8b9zwc_&NdV|FyH zW%!DM4=_Bj&v_`8Uvx-aQ~j!Vw2FtsQa0e@y3(VL>4j6XGDW&PYUC6*n)2$-s?mZF zNgoPg0hu>5r^GR*kH_!3);GKW9mqRF1Ir}G@Q;_Ma^L4|o1TO4S`EcE#+%^8aPdmu z7<7Ti8$X}f*{(ssiiDeu13Jlzi!iFK>R->O5lcpwzzsFw z2o18x8;p7ki0THDu$8#l;PJUAM_}g2-;!TDB48E!yNX6>Dn9^Qm%*J(cNUqwg}q-D zdlv0gs*RFW8UE ze|N&%z4Rh9e2(Ua>0noFV|Owto%?O?mveulqYLMNBTz2IDXZ^y??QkP+#+bADAj8K6YCcuCsnVYnlxs){T`)S&&GZarR{O^o8c&zB z{0D$n7_R0noQFlX+-Yzr5S*VL!LhjzoM@MqgF6d~$wA#I+^oa;{*G6Oam%%xevUo1 zTawojzIYr`Lz;QZA2D(MeYfNyVvMkeEBA9R(>3}&jfEO|oiMu;)>xJG?Q@^6xom4% z!kqX-msD0y1K~f0?Y-ha-hbypR#PAZ5D~UQX2c*g%{R$InnyfsnFf9{70wcoRV18l13Za){slskYMod`f{%kHZJuAihuGX~4uGJI^ zm7&(R|MPnFN%86|?WZ2J&oK!!3UVX>o~xoG0F)t#v+9c!x09)m)$Xmy*8A3iYAhJ! z2`pk{al>Of;Q9h;52gVlyD46i&ioxO9=7sKTtg$ZT}04VDo^e$ypEMLDS%_*S#23o z5BmZqha)HvoKkI}!v;?q`JRx)$W53Hew_eCR5}v_A8ugrb?lhb_=|3%M$|Fx*dI+# z6Vbcx4Ouc5cRKQ)EKZ;F_WA$~c?&xcJiXrJ@QeCk*S?;r2nY0f&j2x=~8SE?cNcL_UO7lf24J7*hN`I#75J zbC`feC{=-IJJp{Qn%3beO{`0fhw8vr0-D%!6HKltE|G=b6(sCv**m@uC46U3FiXzu z>EVpw-`C%sE`m$M(yi&YCK?=xI94R{<1oqc^FbsZq9uT8ZB35t@2Vt(KDc7ecpO}G z(&%D$q0t2&Uu(B0)6H5-TvNg$2zaHElT*sE27UM`!Bkf%ZBrN)ww!O^)a*$SxfbuP z;qNSu9w{Z<3Y0sSkM zc;|z@*Bg&?;HDs?5>lJNQ3uV-ucDGrhXRo}cy>gj?-RHdv*#6p8a*_oXBEZB zDTxVoP%|-9zHN6~&)q(2@~nRTw3)A6INa^BYqIZr`9=eYLblV8Bg2JWE5A| zR@eA_Re7UB9Vl2gRB;fsuRglZS#kLUjRGyxIw&1dWblODwCQu}CR@|1%EpQfJ;yc^ zPmL9$z&zK~gT-k?o%)6er!NuwSYA45U#wY8vh33A#vCmabnKv1e``wuO5QA`Khtx4=|#V6&HbfJvBe5qme#*SsArK3 z5vK77;&fQ5@(8VzCGQ$)5bD2Rtbz304sEVX+3kGGo!iuqY9}z2RK0o+l^ai9{KWoL z857M))R^ywn!qWkgK!txwNI=z<|w=|Lid-=wccZ-;*w~Pl_E%`CW#{QwKaF9T8mAf znn*MTd!!r-Ix|cBX$jsEpyNDSv^ESIt_~5j5SBZl6ZEP*;zFR-H?EX66^PRVy&628R7=>|F)yD)+ z8L)f&G}43zm6Q%Qj?A;sKUR&HP{VW0^}u)s^(mGK!Vd0q^=OZ?6?0U(*VVB9A&m>j z?1Su6l;K}WoeQaME=TqHRggt6XZ2j^3_*O-D&!Rx3cLS)yTGsrOY9s1WsioMpbg(n z)m{W=^&)skzxiScjY*}!(5=wEa=QJQET^g z-XHmJ(-V7{vUQ2-^;X=xF?N)1?NJQjEdLiZ-T+??mj?iB$Edm|`ZSiExb0L-kf-ak z>Ds{hGYOfk@xbk%+Jt7@G~DdBkv&e|I>rn42jKMH?EwgQ`~V#Hu~W8sdp*7t0bfJw z9)OmR2jFUhFv_&C;ln>Gh_eUNVz+L#9sqd82Vm{fK4sgll5hT5l@foglDvG6DAAR* z!MivM+lfQJ(n06;X*(knsw0zXxo=J{EZ_bH*7VlFubOROHOJ?bg-A@wg0Kk1=C0$! z1&x33J^(Q+R%)qUo}>kW7&;!uT^8LNsz9r=o7@?QH`VOn@xKI4O>}-$N-?jV67xhDR^xu7z=>iwW zp85pV-;9QgJG6`kAX0OWmU2>hUHt)&^pd=KEcpPCXHP#7FM8LL0eyP_K4Jhvg%!#^ z`Wm3bNZ#GgKLE>5AAmd8C^Oh}z@Y_S-~M8C(l1tXngJITwDBFF5D#WL)+vwmcB*T< zthQLsSGmH~?us!z%b%Lk{DoF`EFOSrmUv?E_dBYNoPSqq;q;Ri|Njs}*+%o8tH8PEJtmYE*O zkvn(9$b^x*0qoYWnm`UN1vC86gIGAx4$rGrvnaaC-Lb%OCh)hKXVu@o>FBn{6 zJ1PmS&0P&b)?<}G>9ETd?hMcXnBZ)I9QbFy-r=N>ZGV}Da8h_P+(bu!Guqc+pRTkA zfHLNuIlvm`8|gaEuY3UBE9m*D?^9WXjw)Fbu6qaJsyu?bHp*LgRp@T29WBL6jaP&l z_CbjO9if6o&bk}K%!nXf@%HO?iy_e0Uz?r+K)R8F?9l2=_QCsW>g9XMRYy=WM#_GV|dDU(;x zNoV!WwocgY7djck7QR-HbF4l)vnwd9x~xefOitCI?{{!$-ZsBmq#s+ES{q4=n#}-K z#x~4z1LGGOGI#JJ75J0$7*Y5u?h!Y$?a!gj5=$|Z8LPgcRR)%j`pRGx>-tEe_Zk)Q zwTtq^G2xM!Hu*i9-`rC<7mU=6L$w;~-ppQS!q^x)!_L82SJ_bg8c$d(=}p;QiDx!E zaX#X@t33B0(*?&iqo2bmvJJ3itAfA^vR_g=%rfE8N zK#PztozOS;@rBad**nf@dPd^K1+v?)%H1+)?+dT$I`jxqRW7s&ls69Y*Olpd2Z6{d z15fShUfs?OE;KJk^vAz!yq7Gc1sziqBu(s>WQEWtbBa&M@G8`nQ3?1k3)A6$PubW! z`CdP#eoAqFV8YjQ?&=_KBB@@UDt{besW-ibStsM{vRIWzY0xL${G&}vYa@1tC0mKl zg_*j}luN1?U6G`8p_-$$V5CA<#jt5YBTxN4uKF{tP2N{^lu+^X#-=cstiUE3 z-5p#EyOG&>OJii!KzIbX0Y&G;sRR&G#APjH)L(B0MEZ@JeQVZz05BqN>}DT;B>P)y zNuE*u>RQg%0~-kCYMoss3FM~lqP|DYlj2hrmI=hxQ8ax=oCPjrNn2YWX0LjDdK!1XFutbRTa7F1+I4sXZ908f z$z;*)A?AibZD=_YG>>nZ&t}%~+PRTa|>oB=ymsZA^gJF?$Qjd-8C- z$U2hh9pp_7w@EIwakM{EIfgbJyV({mE`2zM4WEQ0{&baBk(QhVSj$0WA2S0r^iG>BS zht-~c+Y21((Be-S@G=uobfTPO8t=l0{sHv9K?vFcS)L8bNvH=8d4P9sYUe5w`%FaY-D6%!Eh4<%W_|$hB zg-~|(Z93)?DiXjB^9Ozcs($$df8VsRKmG0>WT(dSM>kcndH`t1zy;7xH0jlO;O-o- zvZ(=VYv;N%%eyaBz16P|T`1xeCem`K_Rt~^@d;{`YJ2J^lNlb-H-Y9V8ppJtKNK*l zPZzWLnq-_iqKEB$47Kstr${@uqZ zS(Yq((WMial3_(Iay)URZj0xQVafZFwYzS*BMD;6RvZ~%Keqy7yYi4P!AzrzTR(0i zXh0j!pgx`y1=^}P*@Vh2#;UAy6qF~coAzNny>$>HPfZqo_)0Fi+E+Dh>206wG&1ne6*gIl|etG>P20ty{^Mg|&^%|9X{<4eO^OJWU7=4{`Vao?X z?^@_PM>2~YlxMJgB=_xQh&QbvnF;$>S^SsNi;n?va%>~UNN&T4Pn%0@4!%CyWeV{s z$@fOLOXpV!`&9!Hi)2BhXBFyvb~v-3*CeC-gZNktF1oNw!4in%nU z{&&h*PFjZHGs%i;w1Uqqkl+Oa>nJ8#*PrclB)wEysu>{=b}v^xdyc4370PTS;~d*tuE^5oJ-f6x zv>?u^)SaZSk;qyXC2>`}f(^R_}6;O_4O4rZZI=7Pq!77W~jTlvmZl-T%; zFoZ*^5+;v3HgFKX`Md0Q+K+c0%;-8{h=zBIH_>3y@w(!wJkeXS-$f(T_ORx0!c zn%uo=Y2ht#;eluQ zbInFeo64bv?h|h^&UXw*m54MJuw?esKGMY;Qyq>ANSReq46(qik7`w)jYQ5m-SaAE zT8Vyb4t2f|n5=wPmLUS>wA1RaxOAHGdV$($rIjHbVWugq-;ts+>1gGz}Cu69IRiZ_Tf7cz+r}GY;2XzNU(@?Iq z>Xw8(nYrfO<94QmgB_Km7lMLMpZ!3>eum)K0=EyTI~*_(FLq!DcN(2wn1FXnH|d){ zEJJKbI2=_vPRgxWo~E1i2VeW(p**GXQPb0{Nho72b}Al&X%Q_B86UE%BIQD%N0luJ zE7MPu<#U$dDxF+~kyG;qe2W*R<;7|ssv)Mst2MC`dk2o}1C6Y3Xk{UqYErKXE^ljh zY~37cZo(3JId?THZMl_fJnSwSK0)f^bKK#1kXKch`Y6$a&nZ6UgQ2E zN8(pX@+cH%4T;LZFnu*4;|g=>&b6jFChZ*&%y7K6djR|gV8$dgBMaJzb=?BFL|YMiS_eNf&Z6=;}O*H0Gten zc=3%swxms>k-~s2ACk`BW1SdMXs}OAzeiJvHK>2BX&NL1`ici2I-+^}0Z_KZF&t}N z81$d!&{?SUH zn#w05dlJuB4otVu<%uJku2-ureCF2G1+OF239<|@=2VFzg+Ze6-qX%ITnh>thYFRt z&3UV64bvXYp@>sxXw}KILzNug;A<9I$OS#Nu2(;(f|ky|u5RrxAB)*L;6sh}5>RRp zY|%N4SEp{uA0cBZpPg%yFRp6^b8_PdJTSRtFyMtifa*+ zJUOw_Y{J`74P)mynRSi=v-UT8&u`t+!>+Y9q@90z(CiD`)JbUe68L(gNPSXCtwCoh zKiSeA_n~J8xb`8Q9ze5rpqd}Ms3O4Y~590<=#Y`>F#6`8jAA6dvkJe#ltdck$reSo%Y)lIM zz{YS8V*J5qci2LLKf&Mc>{?lFc7Bxj_=&kg!fw4?nSerMIB9+7rcZJJsP5@Qck3N z!mAi76WjbL7QYoS818CN5KtV%7Pi;b-s+2oS|5GgptMgz9rFmFp+CF-OiZ@kBYr)1 zwy%G0bK4ws2Y(;+Ia_rSA=XHJCLo~c>AR)0W@U-W`=xFu;7i5B`_+EQ4wGTDvq@Ne z(P`**x_evIT<-)bd4w>10rnpsy^~@vKi!sRUt$ShG8JA@phN3s=o0+sLc;7m?c2>XcxmbZSY`TOOtYX;o#bhtQrEy4NQ_?h zebeZ9p1mu%a0gySDL+L$TQEh~lt}MpBzqyVRfd3tancJckth0E2X&bM2|*-5@UYz5z>>^8&L zuM_D%sElFOZO0TRoxr9nQR{5z1JK`@aeo1$MO8wVHEZeU<4eiY#Ubb|7)l$dO9WHY zP$RQpVGWqi;}G(TOB-hHoOiS$QFoUx?_<-_1Mo3BK4=)+Mh6Rf5BW;o?!$cBp~CtH z?|=CwH6MWV3-IL}%;k>nT2@a4#idYy`p!H6OHME>zbz#C%Ri{{ zcU>trM!BOk{0AP;|CI;Ni#Wpf?Nt-yaLIaUI%Z}q%oT`-G{of?ig?nf|0+0bitUz; zx2Z-y6T&>c=srJ49l8=-C?Nzn^{-V=i)RaE2;MsUAPdK|Vf@M~MX5Nc(Uj}OpI;9d zD>0AI?OT;*4VNc?Kp4fFPF>OFy^u^^Mu~i2djM9VM6#oJoN?WI8fy$}(yg61w_F?i z<>#~gk$JC9jmdA8HZ2@8sQow=CR)9vT)2ejpoZiSr~aGqJS!*lmJ$fGrtH`ZHC35Z zwM~aQ7;7QupkRpPE#RMw!2}U7q%}CfalPi12`bJ(0~wr?Df-L8upF zdK*bCbnCwu$cA7 zz5#En!n{qx#C;+Ohwncg6;}od=KL_BsGa4$9zETmG)4^Ud9tZcTbm$nIyfk`2p^5_ z4|IdpC~O^fCJ~DSu!L#4=ECC2Sh^Ds`lVX-i7BuF;ofeaH$T{D?OJs$eG5ZqGF)Cy zQzJs&1YzCWXf=g+VnZk>)0~2DH3UmK@GjAdUXwcm2qfYS$!`{_2pSS}`Hk{wks$Rf zxN|_P1?C1TXrzMf$u?p>o^8;<-` zn)_jbhklIqWX3ApJE^fbt?vMi%rz1q9$FjFlYm^u{m&?4LqsxyeclKrOMWaW?KkeY z`HX4VVgZeClux_t6Wl*}&oQt4-|8$NOjQ1H~kCay!TLW3R5lX1#n_m+R` zTvev8uWxZjF9&kKUz9MC`2cn`LdX>g4K_=C2#Vu8a5VS9{hb zSDQPlmvZl(l)D>U+bGR$@_W8-bKb2|ZVb0fjfqT&BGAl?P0cyeR5dET*uIzO*JyrH zy;;sC`KXv~WUawhbnZfh{(GIhJ{~vbD@DXYrB)#^WXJbo=_CdGzO1>YV9w#secN7M zV9)^Jae8Wj=(V6eq&{$@NoQjNT{|izbCLJzJpZP#B+>T)Scf#PlkW^%DBZ82M6eI0 z`Q~#Z`CX{621C5lRbGFJH!qU*Rsj5kTZM^HQaLRgjo;G0ZTy=Dj`k*nu6aMswNwtT!74*C795Vc^#yMU@9OW0 z$0uRpZL~|+QweE2y6srj?RCtzcFYR6YDM;jtHexGLCoZg!rlgs;+%%LjqBOfXH`z? zDQDn`o5;%JwD`$9iq92IA@mIiy&RU>C$qM#^sikP@R#>HWisczOKLVDMg+{RH4UO~ zW=3_9{vJ8|51-)L?{rtO7@_sOcL`tQx-BR(Eo&rCa3MDt+cG4(K3;b|3TI!Dk^v?J z&Q1~I$;zxDGmCr*5pPlfBmbZyLOJtXS!R}2<(QauQkOTyd<-Q;-Vr5vRxC}gES*cV zRh-^}f;I2gEzlE8{4&WctrRUrkK^{j-xlLJLG&MhVF{RO1P@aMBSvrbZfWif#oPBM zCC_jgU=jOj7%;)z&(km3@Bcz7v_YarqL^~!Vi)K7=)Y*K>2GD{sBTaeVDJJ%m~K@s z@xPb)m)8EI;XkPNuay0ThQHMCCwFS7PFK8OKnwc^pz9}$lhij=z8~gZfw$WJ#@~_i znG5N2+e@69X_(R&v;;*eeE`Vv{%LCVZsp#)osk31xmS|^R>Q9m`d91yTMbkWFuOei zqxlZQ1S+U7Wix{^kv%Ul15?N)h`?8b&3BGbB|{ZBg$lKP72VJ`umIW-JNRmW$~eQ4 zN;k^+)+*}m%J?5R-cR+>k~ilwJ1U4!-ZV@z)U)$l9!s*Bbjf+ z`x>|g2#+K#WKx-EPTek|k`l6eib4}!;EkLwC>VYpFPfb+mZmk|+VC|9vEY&aA@NFR zp*dRCUx>KaZqj|fe`M+Agh8|6tzBueo4F*ioqeG~ep8`0TY)>|Rnf6StVW8Uz#~cp zQz^t$IKA^Qg?M^<{wbSgEh}t?yJoE5_T}$9i;J^l4lizSZ5b2|EI(GrabR@!k(bCz zOLCp(vdP9@$4-Fm_8~*Vg`x{y&Dp-OdGGn+{m9;CiN)AvN%TJ^e$B##W*Tt498HW6 z(5W|>JHTw`4L0t%czejGekDjhCB~b#OZxuO^<|>&l3fj9Tqj}-QUbNotQRw#uvj3g zh{yNjjS8Qo%`m$L{%k!HZ-YkMFAsoSSkGaJxlXN7416zD0=Yt&t9FgR#X`Uwfr&v} zSlCYTuLb*7X1!8(+vzUR!mwXqbpH)sGJ+xpn-)%G4BI=mEMj3g@_TMgt-=BcujXqc zp<8~d`{$WZ;;Iz2Tcpjpd}FE5KsZo2a=@p+l3WeEmi&!N-z|pHU7VCOdf!DD>Z;#p z*UZ&+ZDiYN*H{EQtZmj%m7oK1NkpXN11WU@!SI!GGNHss2)56{nebT-L_o2XCU0S} zALs9flS{$v4tI<>Mhk}X^y?e@)^$m6@mz-B=5!J4rIMG%Ha#mNxm2+%11c#)DVwG{ zP{f5-$(~_8?E9b!71ogTMzWj;{g`@5reHcoV)sGk*CiiUJ||=JI?=^ghL?E@IucvaQE_*ZkeiNw+Xpo_^q+9dLKc=bL)Ti8 zS!U$y33I*4?M!Fg_7lYVG4S5LDp-FUEiZn;vJv_z#ev-r%=gr+FV>jz>cB9rO+Nz{<#~`PHVS?MgVK^pVf6+~fakgRinFgLelwYp(SO66 zD@)%{JYNSH2aOZ)F!BhQO0ONMn? z;l1{Kn6GEZ7G}C;$qgHPn5BW4qa!fmQzk645~oTQX4b-FWm6E5v^ACO2dFO$1>=X# z5%@#mk1Ftukv{ugmL+pDJn5wG_7 zQ!OzM`m9Y-*urz$N*3z$7(pB}77G09QOdFHy_BC&#bUOlemwx*bff+_ARi6*>pvdg zU}b<`*(kB%OmJ^t4`{zqOkibxWg$~)oMj@wzWJU~@hlVRL?IUe_Vs4~>;d?@tY2k- zraua|{H;RZ;0?=V7!6)*-n6rOro!62S!a&;&DX}>ADeZwO*`I@MQh2V zb$Y852|Yr=L6X4j8N#rh(nnJtbbw172_U8n^vA@JmO@6!%tSyK)_@E6$po~V;RFA7 z3m^kl787@CtDWAo(zktO~O9@_rXVd9p$y_T8wvWA4Sa?kb ze=NFEde#ibUI~(n(+`iP3e%ZiL_o_W zU|y=9edlFV2gldYSM87Q^nNyj++HwHl1K>FQ!*Qiw~l7rip&S`Jl<4|d2~Bh?>Fcc z?iPCf^VY=tKK^iEY=nFaQa504-?U^|;sM4rG=A-+nhu?9Q>Y4B7rewEGZywMrWzn4 za?W%v%HvE;o_UrhtnK-|!F^1(+R(&dGKEB`w$*jJ={{kqIc};n*~-^0LuUBUDoQ(+ zY(Unq?&IRqizCeJUjGwfeb>hUWvR<_6ry1Sa%L?ONwir?~|y#2pfBH z`7>em+QW+hOlI7gS-o+8ClL4i%8#R%ATWw&7td)LwV&!7%qi5fnp$>z5y@qw1YYJ? zI`W_ph>H@KioH!%scEKv+v%s^_WHf?K!K7OslDf>5>Y=!Liuw%V@2}2?7XG(E{*+) zr zpXi3sXd zZF?5a!oss;(mB6Y$}bYp?I4L{VOalE<{yAaOuwHC{7-KPgH1eVFnP9{lhJF7kdZ@c zgmaDBdY*-OJ|GGer@MIuKLCq=Z|W^F!z{dh6}>7m$`H?(`mP-BxRSB&^wiNrF0-28 zT3K$)9{P${+I(USu3rH@Qy8Af|F?!=_^4m#A~;1@wC~q||IWYPh8+D5$_#dPm`;2{d_g@d8elQ7t^<6e;=VN=*<>ePy7A11D;_|ZROs?SdeN<=Ej~;-)=VM=Q z&fI$<`6#0Yo^-XEtNW;hL1nOwGH{!iI|kq=_GYlxa{$ub?Gp;pl=@}lg3X{ZbX zET$42PG$IrZi?^l>MUyesnst7{qwO&@M^mHzBor0O#$z>c|Kc$13Dp-&j%XHcR9R{ zG&=DL14>!N*b}zf-{Z|dCIW*$W-`EI zixF1uU+b6yS04~;=UKxfc&;nknw>kRHomT{I3NL2TR6^cnp=glsvzuf{vEF za=LA}err30bLSLy_xawpLtqxGvuqqUc5;PY(iY{trADjbxml{)xOuJfXA<)-^OOa} zVi{UHIu}mbqHPy$hTC85TXat@M#Al)Y>KJ zTd61i0O)5JJOF1_KEybeukRiJ0jm%w>zPR`%{b+y=G2l()%e#jx|$lLh2=HqYgrFUAt`EdBEz|Gy+h`-opOL;oLX+-dvB_2Y{2auHqn| z@cGLx*NY?UE0DT`MS;goc9@QR`VrZ-%NB7tA!yi%rI4n&zVH-zq`#C{{}G zU-sv=7t9akzjXedoD{V1WsbVe>q!W$3+aKDLB(5V07X2?!;oupU5U}d!J|6upycBE zO>bOPhUErW?&j|PmDBU9lAXz}jS{}y*N5yJle5eGV}8kxddL+=uf5R%k(DtY52EnD zx9w6B@DV+mQm{9?y_hmFM)555sLoh|8ZM3AQplwGzup?H3r?Hp{0G$1ewT(KAC;pLX!{v| zV6SX)a8HRpwkRL`vL|PJB7rQZxG{a30E+eN?agQM_=~WGhhZ=N{AC2ffRMOdDdaV| zz|{jjeGank`50jhvjOu6=lS#<~P{7~);cR9PRBpSe z;%)7{u2^Cf4?2zo%s%Xp8*(YKyLXP{A-yODjXv=L1+2 zDjGi&?B2XLHFoj*8c)$O@t()wq?}lE>FpNr8m3|kLfN;AicPICb$Z9!SIVJ!5R>M^ z`AHr0ENuX2L8!J|=!#YD`F$Y&6~&9v<2do)=L2v)s=i(YH#mwbkO2cA6H8QKo-h1G zFX+9hY`fG;RL~rj`{d;caG2LFhPlear|m|EXA3)o>mzANX~@{xO>fXf*HiSDPlPI_ z#D_cP1j}g0#G6XDioMe;m;L$gwG`=pBaj}z$NWP{fZY&|GZ8>unMm_~wiv-DOc-IC zRLX2bf^WoGyR#Sg6zs`5HC$4yEJ*I{$yJrKzHCsO-5G~vBZ-8lIDnDdp7m!y!8R~k z9pk5^&U}HsSuS$*1HD zR`a`fK0)by4PGp{r22)YD3kfX&I07-DxRo3R`lXB&`z}wa^}6!%MB`EsnX7EYEFyv zInu}<_Z&Oc<1ftV__t2{x$yo_H2<@k*zOwV!k@}nY7VWR=x>IZthkrj-{BKCMar#@ zIVuj>-d7J(s#L@Qxbm5Aili`!ejvOHL6#EE_x<$I?k}ADjR-iVM}Jdlf2p*87cg_)Y&I{LFqAe!TqbYTdHOxdV&kURXiZT`72SYzMfO zma#H@Xge(;sUDl(`O&nqn52!DtTu~p$VV3?CGV>Sjs`XslNf`l8VYOtRq`@#5v{p7 z?u%5E!yDRQTB%|?<|FB~FBMuImht;jd1{5F#bZYHjl!(V>?vT;hT^+wKd>^XSBRLj z$Cn)Gv7KC%M93p@IStX>9ROV&`Y%goA(lk=P6{5M$Ye>!0h zQjedGNYt(L^Timhn~?mF+IVkHBJC>5p-8eFi)5!NVHlOidS{5gkhL?>^a~>%cf|9v zYp!jp-QMQ@8$Q^MKl=H{#+pUOx%rxTXy{`1<6J%-r**3Ma6$ zXlf?hKsmN3ybH!1MeVLwNhe0lf3tZ0Bl-W2efgv0f5>#|KevD`gG^LT2ios7_P$ZP z{pJ{mG1-iWD?CNS zUUGH|z{3ChDHui~{C~k>B!C_s55{D4;12+`pgXp^Xx2=rrg|+cwVa!Uk-oPPOd+^( zS}o03A8;z01rHTbUGC`(xhj+|?AzQ89rE%qggq0COA*zyO~fK7*AKSTUiqB59N6mL zZFXo}TSPA=$tE#Ta#uRsl|Wl`aF{1+FSoLW@a4Ks+&>P`D-3X0Sp&l~gX!NigAgZ= zTMTwpzU{Z;mruhOde}BUvy`)7@GztE}3_HvOb0GX> z?IIt-JV5Jce+reve0_pDm{W z$-I^|bsd>_TSp7RuT_XNgM#uVH?f{T)ySOVhT( zVMFus`C+-CB*x1Mm6hy*);Gt~Gp&T|FD4?2dX_7><3RB6f##wgwS;?$zc=FVD6<t?@ag zTaOG4McmcdPpY6}{331>rcmW2-U$Q{=hqo{fR7}xumkJ*{sZN#_1H1dyPzq$hF8_m z;qd*aI!Po+$kHLz|_$}IBJH{HzwK@!8A-rc-~lIF>cIo$`Kap~LC;db`^Iy*F^)X2_l zuJ}`Z?!ZA{y>CDHNWRji|F6C842z=K)*Zos1QC>+lp#qJBu5ijK(fREN#YO`$!QP; zBqzxNB3T%aIKTjdAUP>%gaHPTAUWq5ybb!P-#+`?z3;Qn{dfLA(_LL%Rb5^6u6Mm_ zq1>5ZrX*`~_w2+>O1`?b=kSw!@ACTb^cVRDuOcuIb#z7jf+H%Hy=FD_LxN<$ZvUr> z6FydaS<`4wR$f-ETsZ;ai3qV1*buOZd^1D?fag+}jXkKEe@9XM(60ZXq|=)*EU_ z8R*`V&@sBrQblkG#!=@iB5~bZ)e3K>^}mAx1@_iqy)ayK0uK6N3h0jGsYJX$er%SEmT`k?9rN9?v8GmvO69XM>Y`L0A zb;bod8PV;G z_~DCUFh?D^qC~7w6$oU=knNB}j$$-b)o4L@tBiOX5Uf`F!hBvQQd)O#X~X8$tNV*x zKv22#j%(Sx8#xDN@6J1guE&fr;Ko@{lo+F%vHiT#PQ|QI^ zKkWAc@oqe*6Nf7-=`&qxa?QS>>$e14kcl`&>PRbFyJhnW$k8!c)ywzEUuH0L@q|UM zKaHDBli||V3XS!0)j!xSUD{Z5>RulibKIruo;2Yg39YiKwuEw}86-AwG~}J|fg_+) zZEadgn_2no&B}J0IQzY=&&B1LgGWJ#_83jRTD7cE{`=LByxS&;SCzsHHLCq|D9@40 zTs_-!rRJLY(8?|ks``8`1LPBaxpR$nocEI+Nq+Lu5RbwQurMXaO}3e59XD?j-Wk1e zGh3|FsvheCj89Q46fuVyLnE|J&+0wU(m6*paP?dOE#Z6?0eJ~s;mEY>$>k#1sK$Th z=O7mItV_+wbTsE_b11rD8Np?G^Wu3i!MisBlgN&^>V3Ot4Gi)+MH9P!ShEehg=Rxx z|E2i3#^DbeO5GPy#Q-15GT1k z|9}ILD;HP!Ro10{IJa%IBLyL#j$uf9&)4{prH8q>D&U7@`Er4v3tClr_pmSC9`#1qaA%_ z+ndT=PT>X99aVJdkJBnDRAhUuU~zTY^R=7oNVQh<>dFXSYFC;dZ*{XN^_bT6oxQ+c)i*7$g&hEWW5fkuzM8D7`? zlC@+07Nt7>6aI;?sl@HC4i`6&vV($Q#zu}h#Xtswf^e*=hX4w(S+fmZEq>AeLGD33 z`MVe3_ws?8YC_Lmd6WbY2wm?HW5x^W>xE{;t-#b|HS)P_k$fn)56jKYhkcyEtbK+p zIuS-597Z`VBN$S%w|Q(p2!y(FtNOJO@X3i;A9yaX1h(bdIxe90=;IQ5C3d@aoMHQO zoa=_5nK`18oFh>MIb1NU?uX$FI*KyA@7}ng6snkvG0-T_`V_CK)Vq?y-Eks}far3P zthe9uK;Ei0&_o6$(cL>8>j4bIG!J7(pT<62irp#Y4 ze}6f^Y8S>u2y4Rrv5>X@eIa98(+@IVBdaTS>R6Sg45UuCIGWxm^Uv7T~nXx<2Z}kv7lj6{QJp3A)>F%j z5#n$#d)pWGO!O=i21(3zgF55wVVxQSts19P?5s*tv=k8`jb0?@E1M08rW@FMHfGLK zU2iZALWi69Rt{DnW;^#FGa^|7H72MOz|ZcwH8fqZS~RBYaERG)%tQ`P!(6fLm{&Uo z!#Kh5?7>=N`#x1btm=j%(k$2UjyXu}h;nD?C=J9OD9Y->Q|nj2bn6^Kvka(E@m7c0 zO}K2?%7zgzvDb~L*uC~PU{lyB4VD0hSZ#mJ{13c*TW1COu#34}$u-M4-yU9$3EWNf?=*KGt5Z4?(4cMiV+XAL%^$!8Is?RGdk*NR6bq-Q?DRv{-%X53xxk7c8{Big^r(^;iF3uw2kxvDe$Cbw&VvIl zzqhDPQW$FjGU9P{8y6_3A(+O->+H6d3Q$Jhg6~e3*0*PGR2J8FB22&DUxg1`sID9Y z`*Ru27+tD-*5z-2pzLWbxpXR+q};V#Jgb0*2W}UOc82fBP}UuM(-%PbCZKwTu$9HD zl`l$b__IWYi?arJa}bFhzQ*zDRuR0UZ{$(}+UYoLIO%#$gOkstJkwY?sBs1y(uaEvuw{y2Qk)chbSxyUhEokZ44$6I2;J4+WlEpPGM{vjgbI#v?Qrhx%< zG{X8RAC*EXp>Qx)!V|#q5-K1IFK@ZKOxLqC|0qBraQ|X-(r)}9K{a(4Fe0%!nM zoub9u@1U4gT(=BcMhpwT9Pi0!*IDt)e$qQr%z#9rLnxExloe*?5gK5?yH@^FKn(kB zZ-^+#r(Of>jlTn8F2ZhU)r_Vu2Akgs&j}-QjFc|1#aB89CxSG11MWNIK5|%On2Ha% zllw!S@pBN(e(eu0kEy>Op!e6w-*A}WkQwmMGqvJjoPZnL*zMR2jv>QAVsS~Lb(0MC zrzbx@Bx;8~ib*dgY!u=$%kq5JBQY;%EPjWyMALy>XDCf0KU<}~dp^kBv{Q~{ubjy%K>KTehv| zDWwa(y^cv&wPwP_>JxnJA8Pa4y_gE&zv)t!T52e22knr zqjL%qXA5W56t3CgWFe8cY4x@y7wEgA$Z%=L)>dRZI$`I+j*_&Rr)d?cg&YNzCoD`Sg1sIRZg{G0|!R@MU&ynX>ja8*Z zqZ7YS_fD6bIcaUOs~{(OaU*O(r^Z%WuVOJ}eA{);NC&yK=@ggkkN}-2K2)3gwpHz@ zSzQfQvOavcsP#Jdh9Z$f?21VajH@fz5_lS6wRxQ=D$Kj@{5#LYiuZ zjA0I$4n;Ah+g6Szp)`iEX9m*mDzESjEz>%H1I#I6hxn4b$vVgr-JH&yhCbYklWH~^ zbM?Z`_8S4wj$9h4xu4*2q~JJLx;&D*x*c8$5MTm%jTXZbSJ8N68X&^5HDCZjwGU}1wgg3cR4O_ zzl-f`XSm+mK{Q(=A@kC{D=ps9-r4mb`T$^f{fY)xrgxFPZU-Tihf>KVqNCJ|yUCZj#%* zH4EEbNyXfhppfw)D@|aI+lCo=Fj~;{!W=5DW^^t2!hJe+E^CZxFQ**D!14**lX2Zl zg_VLBY-=7q{7b}wGrt;AC968pwZG-jYk#Q-V&}}xZkk*kFMAvN;(g3!L4^w-lZt=!F7 ziSlwWP=+Fl)oUqSx$2I*|gW=f!sH*_&rlXHP4Cy6sn_Qs{q`#+7*1=1k?2 zvh2F@7A4^0=J9UE0+8mz#LJcC^C=wrt{;^8u1 zk6ZUOc^=rJ>_Eg3_n?52#K-{^zCU02krlrn2kCXFW8P0h8`c+?+vh3U`aF5tuzthd z@zKW*M5$9;lYAMvaW{+|+Qy>peJOeT+@>SBV);-R0x`0khQpx|#_)Q~w)z}9R&~C@ zhZ-R&%;(x}pHVR&a>W8=JAQ&XYgO@4AHlhg;6^dhDoh$tUaIKWM0v$#UCj>K`S8mX zCu~Yx1wseD_Xa{XI!`$c72QwmawCJfm$cju>d?JK>gXq=p(h;!d#$Z`_gTo8T=$#t z7(~K6V32e|s7wso{GpEJKpoPK980E$8dDfU7i@ivM{2ke zecF??^xv+^ZY>InJ4XUDIm7e4kUtZQkVh;QUmDCF;(ucxyld|dZ@h3Af(%@pS8iYn z6yhR$=)Fr3X#3znOCFcxvHs=sgA><|(z5{`jfTHq$dO3wm)qkPU#xQScozk@xZRIM z!QT*XTR)R?#Tr))dP~>;@SuBt2XPn=#3~O=M)1t>NiU7d9)ie9uA3()4vyRl5B28*rvam(2UvOX!aiy6=wU z$rB#{7Y7c-W?I*8w~|wlynKQ!-f8chAe)^xMVjQ+%AyzXO4uug$Mf)YiR7BH!$NIG zvN?P94O(lGJaBf`%^A%LL9`arfg`j}cl?0F--FySnwm?9*?Pb+5L8|rKOO8GD&Yt( znldm{mB$b#O|7H-uT9U|+6gke=&j>-v*ia6sEO?D^{khAo%?&ZjwkLK^6}$+V{pb> zwluNy>>ontWzV%Xkqf#X6i1^62H$RIIn@{U=V0Xo%ad)lP+w8lfeO*!T(#|VA*>uU zSz>1IvxEEgqKtb>^Tgv;nR&35Wtv-=DqY_ z812}5t&QSI>I>Sa(AXV)!jWLzmvJeFwFkJ4Y2zNq5E749Km|D?ye2;?SK=t7?|YoI zQx|$KX0JEF)In(TY9>HSnXSftZw1w9R*5*Q2gvGvHGg!|h*jaEtVdF`{A3-qW$oZ3 zmAKKKE`x|Z#V!rn&5J5o*(j)Y;!7=5DvHEtosK17^T8J-tzL@Oi&yhDAkTw$S|qnE z(tY=GmvVif3tqS-$2NNiOs*AH8|^KZ&69Az8sm*ycD=OMMQ`l?c;mcmYKe9)zo}`w z>hkA;VJv)QLj@ach-sAMt7)Sgw zsxQsYaC#6}oT}8gn60N#?8sMHQHgym@3b@yq@}B@ zr|W}jQj4=&D@%W3LkP8VEQQnV4TqkmN(8B&cF*N5jaxyhr^3F(BSQr5Vmem`VNI~a zP8hN6RRd+~0?+L}*4zXU{D%yJD1GZ$DWXf~^-r3a^~ZU%Z^-Nn!yq%n+)}P389BB? zBUZ)3i=X1eXxOK0nLck>TeBw~#HiU^sYaIMZ^&dG>yT#`VjyhD|t?fjo~h z;)|E>xuN+h{MIXIT+AWT!s|p zj>TTQ(e)k6ok0}Lv?*j4^aK%u=u;Z%hXx6vINRs&{RHW+V9b@b;-DuZ`2 zErR3t^3;_Qgvr?{WdjeN&fJ)K)av4BA<2Wll?0fU026d%T9R(z|Inf} zx??|3C-+1$r(^&GCDeD^WU+FQNw%w<%dC|AWlY<7KUL5aE|>IzE4>1f_1(J!_m7n6 ze!rLRKg`U3g{X* zhE&6+0hV5_4AAro0+N4`uRe|xfP~i{P~w!uB&-Xx;yU7Kx_usdT%>WkSC-K3LEK!C z4vM;Zt>wD(Ip~|hH605&6&Ph*VXB~Tz+YiZKS09B9zz+T6rg@6Y85 zJ7g(cp7iE2_!70$jZ0D2FZp={WS#%q;{5G=BQN=I7+>lqdl2YJ@165r{zPo&)$K~{ z`hL2vjszrs>8^pC)qlK&W8#wT$eDGNq5Am3k*~{H_Me!b*dHb+OX!xp;%zS;q&V4N zZP?KI^@8?jzx4<&vL@Tv-MYud!#>2c0bB#FP@_G*4)~SEZhBAZbbLZ~(?dvC+zs2T z6}B*^rQH&asx{p)&mtd55B|WHU)mXH${n|Yw*cXzf+xJS{Dg$NFaD z;47xmSm9zs>K3sBx8|YV^p1%k);D!9oXe%o6viZP=C}xlM}t|1YzNtp3NOkeIpYmp z*o6gw>?D{L#MHT8PQ^N!)BrFw*()hu_8zoGV`v33X9VFRu7QOK*dY2RD{Fu(K3btF zHObq91n~!V?#twTQP7!sHzJ76mV9~tnq9_cg&&CYHcV z4`-x^KR5!a$nu4GBmrSjgeGSOB69u*Lc?Ut|D-Vskyewf~Z%ZdG-+lRSu1TZ6y6va39HmzX06l)$E?g_CvHjdE*3Ugl*y~6U2;`RMqOWZW1p5}xKUaP;y<;GWLGRB-@T!SO)n$eY0oT|?safQ8HC=nE9@uuPT( z=5JJpkNoA#ksqNu*E@wzFm>@fapa|>qhh}qW)YofM$}50MI}4oFLn1!{Mc}3_Pm>+ z9YS!NvbYdKO!shaE!iap%xtwEp}{Y{n`gqK!6GM$8yo|*G&Cm z>mcx>@1jt>;KxPi)mZ9L&y=)pjfcJZ(?K6n$1>H_Lhq3OXhT=NQuBV7EkkZ7ij5P&+-k| z-hWdV{CkH${M;dI_&IlrKlv&J;vF|v&MW5|&hHH-HKSUdI58RY)-OQZ<%i3l3C!r9Toq9 z+Za`$2-@^og`0Sud+HP+;rq%y%ipwWV>cte@SqwBsDtu_=K6axuZ?jOJbp5L$1I-K zBE|=U<%{~_p?4?BiTq5mw*QVt`Lyy1CMVrz6S|r-u43pgn1Dyxdn1QeD)!M;t8rb1 zWaH^JnJMlOMLQQ1AI4YLB6z0>f`x({ruHlemnU4`h{Qf}^5Sv%gn^~U*Qvzp zo#t3Z9vc@W(ZuIJCXdM&)P13O(3=7^qs&Fe(W9rHcxJQvq8)lS*HKa8*}f+H3FB!f z&;H(GEfa<&eIB0-RUflZdrJW}C6nlYoITBqNKlkYUPH@up7#^<4sTWTJS(VtmrRdR z>8Eg@^;9~OxA)}GM$V|{5j0)K42l6Yc!au!G^V&HTJC}s0iP^|M&9cO+u=XtE<#5E zn9bhuHT^mM;_&BUlHFNtU}EK~nbM|@thEScIL}c;c30dZ&@mUxOey>?lC>jUi`LP& z9jl_R_#HWk|AJM29bDUz_zs#5Nq5b8-n~LRzi$%%l&>?!mi@X2Dv;VV}|Bu}*eKh7rqsD;aA`IHiFSbn{kaXNO z8PS;Pz^p}wMc(Rl9D2&QL?G-f2UvU;_d`xcKKQ}k5gu!pWlJWymAATYY4tC|IZPDh zuP~o&x^1Q#48G6kFb;Fg;vby%eW+$^`?;~Q9F^9`5ZLc%j~mcmpLrVB4;DB795MN( znb4>wmyGn;d`>6`%K_P&`3~A?f78Hx2er`+yx&;)#51u1xDD9B)FkrCEf};Pbjo`Qn&f_XT>sCNo5e*=~IGLA* z9B9VWaWmdO`hPp$z*wrcKmS8Wq9t`)h5F`iWy;AK z10Z^0E%p$X4t$h$lRv4v$AXm)Q{`VKG#0R-fWosoas|Mk$@ z5`b=;zz2WW1xWDH>Eu>`4ikek7OR1O0M?>$unueVBmes!NT7y19)gbR`+3vZALW3NKB|vMu5=m5R|Wamr+=$?z(D+a<^HX@ zPyA8p>5m=(q`*;+0A9na78rkJV73hdFW{u@uA4gYz_aWI>nZTcm5XG|D6?$)yUefe z3N;@gbONfAW+9+}!U>D`8+&&NeVZJCPYJya1kQ^BrcO7E8zlR`r~Y>&{y)wM-O{J( gdRNK&{5U~e4X;oAdnog_x&H_B{GT}~_kH;P00?VW0{{R3 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/DP001.jpg b/docs/PT_BR/images/DP001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d95a240b70a5f5f526b0ffc34870dc349ad16861 GIT binary patch literal 16809 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 H$cg_2s<=qT literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/DP002.jpg b/docs/PT_BR/images/DP002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4a2a6ca9b0726822aaa194ad31252e9b151b3863 GIT binary patch literal 30418 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 j%U-+Shp`Tzf$Z-(%WFagl(YU*eLAmVL9 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

xUJa_5P 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

dp^e1vLbWGmA88IkB&tfgH0qoiRS5KwlK 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/SCOST_img3_1.jpg b/docs/PT_BR/images/SCOST_img3_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cff2c0adea33ed69eb1bac45395605b6719b99d0 GIT binary patch literal 40665 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 DPw^d3 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/WhatYouNeed.jpg b/docs/PT_BR/images/WhatYouNeed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e54752c68e01a63e5ba2b56a84ed106b89b9dd3e GIT binary patch literal 61987 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 Date: Wed, 20 Sep 2023 17:32:01 -0300 Subject: [PATCH 02/12] Update Portuguese Language Signed-off-by: Valdir Fumene Junior --- .../Installing_and_RunningTheHPCCPlatform.xml | 189 +++++++++--------- 1 file changed, 91 insertions(+), 98 deletions(-) diff --git a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml index f1bdb2d9165..4a2c714050a 100644 --- a/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml +++ b/docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml @@ -11,7 +11,7 @@ - + @@ -40,26 +40,26 @@ dados de exemplo usados neste manual são fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é mera coincidência. - + + xmlns:xi="http://www.w3.org/2001/XInclude"/> + xmlns:xi="http://www.w3.org/2001/XInclude"/> HPCC Systems® + xmlns:xi="http://www.w3.org/2001/XInclude"/> - + @@ -102,13 +102,13 @@ - + - + - + Sugerimos a leitura completa deste documento antes de começar. O processo deve levar de uma a duas horas para ser @@ -153,7 +153,7 @@ + xmlns:xi="http://www.w3.org/2001/XInclude"/> NOTA: Nós fornecemos script de exemplos (veja Anexo:Script de @@ -237,7 +237,7 @@ - +

@@ -245,7 +245,7 @@ - +
@@ -384,20 +384,20 @@ + xmlns:xi="http://www.w3.org/2001/XInclude"/> - + - + + fileref="images/OSSgr3.png"/> Há arquivos de log para cada componente nos diretórios abaixo - + - + + fileref="images/caution.png"/> Poderá ser diferente dos endereços fornecidos nas imagens de exemplo. Favor usar o endereço IP do @@ -482,7 +482,7 @@ + vendor="eclwatchSS"/> @@ -648,14 +648,14 @@ - + - + + fileref="images/OSSgr3.png"/> Você pode criar um atalho em sua área de trabalho para acessar rapidamente o ECL IDE. @@ -677,7 +677,7 @@ - + @@ -716,7 +716,7 @@ - + @@ -733,7 +733,7 @@ - + Uma verificação se sintaxe bem-sucedida exibe a @@ -751,7 +751,7 @@ - + A marcação na cor verde indica uma conclusão @@ -769,7 +769,7 @@ - + @@ -810,20 +810,20 @@ + xmlns:xi="http://www.w3.org/2001/XInclude"/> - + - + + fileref="images/OSSgr3.png"/> Este comando pode ser usado para confirmar que os processos do HPCC foram @@ -839,8 +839,7 @@ Configurações.sudo /opt/HPCCSystems/sbin/configmgr - + @@ -860,7 +859,7 @@ Configurações é exibido. Para usar o assistente, selecione o botão Generate novo ambiente usando o assistente. - + @@ -893,7 +892,7 @@ (p.ex.,192.168.55.1-125). Os endereços IP podem ser especificados individualmente usando ponto e vírgula como separadores. - + @@ -909,7 +908,7 @@ Insira os valores adequados conforme indicado. - + @@ -979,14 +978,14 @@ - + - + + fileref="images/OSSgr3.png"/> Lembre-se de que as configurações do HPCC podem variar de acordo com as suas necessidades. Por exemplo, @@ -1003,20 +1002,20 @@ - + - + - + + fileref="images/OSSgr3.png"/> É possível redimensionar o Environment Summary clicando e arrastando o canto inferior direito. @@ -1030,7 +1029,7 @@ Você agora será notificado de que concluiu o procedimento. - + Neste ponto, o sistema criou um arquivo com o nome NewEnvironment.xml no diretório - + - + + fileref="images/caution.png"/> Certifique-se de que o sistema não esteja em execução antes de tentar mover o arquivo @@ -1076,14 +1075,14 @@ - + - + + fileref="images/caution.png"/> Certifique-se de que você possua direitos suficientes para gravar arquivo(s) no diretório de @@ -1143,20 +1142,20 @@ + xmlns:xi="http://www.w3.org/2001/XInclude"/> - + - + + fileref="images/OSSgr3.png"/> Você pode usar um script para lançar esse comando para todos os nós. Um script de amostra é @@ -1234,7 +1233,7 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ + xmlns:xi="http://www.w3.org/2001/XInclude"/> Para CentOS 6 ou outro sistema baseado em System V veja Anexo: hpcc-init. @@ -1248,7 +1247,7 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ + xmlns:xi="http://www.w3.org/2001/XInclude"/> Para CentOS 6 ou outro sistema baseado em System V veja Anexo: hpcc-init. @@ -1257,14 +1256,14 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ - + - + + fileref="images/OSSgr3.png"/> Você pode usar um script para iniciar o parar multíplos nós no sistema. Veja + xmlns:xi="http://www.w3.org/2001/XInclude"/> @@ -1330,11 +1329,11 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \ + xmlns:xi="http://www.w3.org/2001/XInclude"/> + xmlns:xi="http://www.w3.org/2001/XInclude"/> - + - + @@ -2139,11 +2138,11 @@ sudo /etc/init.d/hpcc-init -c esp start /etc/init.d/hpcc-init status Os serviços HPCC Systems iniciados no systemd serão listados - como ativo no systemd. Eles podem ser listados como "sudo - systemctl list-units [PATTERN ...]". Para removê-los da lista - de serviços ativos do systemd, você deve executar o serviço de - parada a partir de "service" ou "systemctl" (como mostrado - acima), mesmo que já esteja parado diretamente pelo comando stop + como ativo no systemd. Eles podem ser listados como "sudo systemctl + list-units [PATTERN ...]". Para removê-los da lista de serviços ativos + do systemd, você deve executar o serviço de parada a partir de + "service" ou "systemctl" (como mostrado acima), mesmo que já esteja + parado diretamente pelo comando stop /etc/init.d/<hpcc-init|dafilesrv> . HPCC Systems removerá automaticamente os serviços da lista de @@ -2151,12 +2150,6 @@ sudo /etc/init.d/hpcc-init -c esp start

w~o*aYsy35kl%9NLce;A78!sPKSQAzQ&RP3C{-Qzv5i(5}&I!&Q!y~OX;hVAX121O#brC^VRXLAhv2&2D4 zxr-X)AdL|^DO%L-CQ!IoQ0XT{!D7NBc`%s)jWdAuR^Z~tttEL^lapwUO6>ZS zS*i5ua;tTuI4P^uwBsMldm6m39mj4yWNx7CE7CFX^%c6;*1as=rS~ZB3U?IZu#xl7 z&Kz~ogmt^QR%5EGUu3e#g}tLQX63vI_b6-||H)i|09cG~&^BU)kEA>|*U$A@>$w6;wIhiMkvC^e*?{!7 zz5kvABuQf_WYbT!4P+ji3y*1ROJ#%mLAbw|k)E(?b%IOi&YH%bp6%RVg2B+0lvn&jRJ1Ue2R~BopBUzEZN&2&8m^;e(pDlzP2(HyVQ1!C zlWm2?$WN@2F}w|G`hp6m|4!ZCdB3E6Xw z3hODjqBSqDm5cD%`C?|gacoVbM&<~t_?y^+$0+mMh{VF3JpD>zPjG$&r*pyRLKom7 zx7@9%X}X%@?zuQ={a|KIZgIDt9yLL&hq`F};I_+ykQ?u?9HO0DVN5sr z<$5q#a^Sn4w9X_cDi<$tp`H?tHu&Bz+NvBwRR);3s5kOjBWUw7JjN3Hb3vx>Mj;>x$^#KK6#Q=WM{rQZSX{V>$t;8<7=H2O~;|l9S*hS(&kmUS9AZB=E zq3Wn%?&q2iq-vJ|u-xhMo@*C5%}wr4pOui8JGG?MiHv-m*si?fA>WECs^p@-dQJTQ zuuw4{H7{}IaHtmLK$|_1gpm*Hu=POjfriQBgOg=7!GBuZNs7A*T-+ohT+ki-Qg?yG z3VP|*8t7GIUN5ES)0`U8ru`5glcME1^o!C5XA;*R^!0ZMabx^OFI*}#{9g*|f2pIt zqpM#XrQIF6mI#Am3)(MBZaG+GN3gf^_a=m9*`8Ji<_Re-s7Eom{x18!(Z%Z^y7o<` zz_wTStsG+Nm=mv!V)CbUv|L$3Wc$^l`t}s=6?m6wBLHAdIexBapTCdDt9SpIR~vS- zwH?8Kvkd=j-v4J0XU0~}gE)jft3?=Jfmex?Wc{W|4@k)-e=-0#jv6c$?Z$30?dw^V zmx0?h+HKVDFwKBmyJi4$pT=cnbd^`Q3nV(KV zMMenuIi?D~S1?}moLNnM8Y9-DPg7NhRD|bvyqfiQK0h|)oxA|)zNmIqtXNOzf!v1NldE~}rC~2~7|3seu=)PZ#vp<3s iAj)Yra5mQikOT-0P%b!wertF2v literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/DP005.jpg b/docs/PT_BR/images/DP005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06e170c93af1a29840417cef79e4030438b307c8 GIT binary patch literal 46254 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 H5~lwHIPcgq literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/DP007.jpg b/docs/PT_BR/images/DP007.jpg new file mode 100644 index 0000000000000000000000000000000000000000..84d9177778a20e23177e55f3542e3594124c4252 GIT binary patch literal 23812 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/DP009.jpg b/docs/PT_BR/images/DP009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70bfa0a38558842e43cb3ccc9b61cbae04350e28 GIT binary patch literal 42948 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/ECLWA427.jpg b/docs/PT_BR/images/ECLWA427.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb54d613930dbef4b567f104400265a13ea9e2b0 GIT binary patch literal 3564 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 literal 0 HcmV?d00001 diff --git a/docs/PT_BR/images/LDAP_0058-2.jpg b/docs/PT_BR/images/LDAP_0058-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..55b3a74ead4d26856cff69444407f13f5cc2d1cd GIT binary patch literal 73771 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

- - - - Executando o ECL IDE pela primeira vez @@ -2351,7 +2344,7 @@ sudo /etc/init.d/hpcc-init -c esp start + xmlns:xi="http://www.w3.org/2001/XInclude"/> Para obter mais informações, consulte a seção Iniciar e parar o @@ -2723,7 +2716,7 @@ SUM(NOFOLD(s1b + s2b), a); - + Mapeando Datatypes @@ -2748,7 +2741,7 @@ SUM(NOFOLD(s1b + s2b), a); https://github.com/hpcc-systems/HPCC-Platform/tree/master/testing/regress/ecl/embedR2.ecl - + @@ -2787,4 +2780,4 @@ SUM(NOFOLD(s1b + s2b), a); - \ No newline at end of file + From fea38cac91f380811ff819930ce56234e1b139f1 Mon Sep 17 00:00:00 2001 From: wangkx Date: Tue, 19 Sep 2023 14:13:38 -0400 Subject: [PATCH 03/12] HPCC-30080 Not access restricted resources for Unrestricted call A user may use several URL parameters (ex. wsdl) to retrieve Unrestricted resources (the xsd files, wsdl files, and sample files in Open sources). The code is added to block the access to other resources. Signed-off-by: wangkx --- esp/bindings/http/platform/httpbinding.cpp | 52 ++++++++++++++-------- esp/bindings/http/platform/httpbinding.hpp | 2 + esp/bindings/http/platform/httpservice.cpp | 7 +++ 3 files changed, 43 insertions(+), 18 deletions(-) diff --git a/esp/bindings/http/platform/httpbinding.cpp b/esp/bindings/http/platform/httpbinding.cpp index cdb3c46a11f..685c4ab2474 100644 --- a/esp/bindings/http/platform/httpbinding.cpp +++ b/esp/bindings/http/platform/httpbinding.cpp @@ -1136,6 +1136,40 @@ void EspHttpBinding::handleHttpPost(CHttpRequest *request, CHttpResponse *respon addToESPCache(cacheClient, request, response, cacheID.str(), cacheSeconds); } +int EspHttpBinding::onGetUnrestricted(CHttpRequest* request, CHttpResponse* response, + const char *serviceName, const char *methodName, sub_service sstype) +{ + IEspContext& context = *request->queryContext(); + LogLevel level = getEspLogLevel(&context); + if (level >= LogNormal) + DBGLOG("EspHttpBinding::onGetUnrestricted"); + + response->setVersion(HTTP_VERSION); + response->addHeader("Expires", "0"); + response->setStatus(HTTP_STATUS_OK); + + // adjust version if necessary + if (m_defaultSvcVersion.get() && !context.queryRequestParameters()->queryProp("ver_")) + context.setClientVersion(atof(m_defaultSvcVersion)); + + switch (sstype) + { + case sub_serv_xsd: + return onGetXsd(context, request, response, serviceName, methodName); + case sub_serv_wsdl: + return onGetWsdl(context, request, response, serviceName, methodName); + case sub_serv_reqsamplexml: + return onGetReqSampleXml(context, request, response, serviceName, methodName); + case sub_serv_respsamplexml: + return onGetRespSampleXml(context, request, response, serviceName, methodName); + case sub_serv_respsamplejson: + return onGetRespSampleJson(context, request, response, serviceName, methodName); + case sub_serv_reqsamplejson: + return onGetReqSampleJson(context, request, response, serviceName, methodName); + } + return 0; +} + int EspHttpBinding::onGet(CHttpRequest* request, CHttpResponse* response) { IEspContext& context = *request->queryContext(); @@ -1169,13 +1203,7 @@ int EspHttpBinding::onGet(CHttpRequest* request, CHttpResponse* response) case sub_serv_main: case sub_serv_index: case sub_serv_xform: - case sub_serv_xsd: - case sub_serv_wsdl: case sub_serv_soap_builder: - case sub_serv_reqsamplexml: - case sub_serv_respsamplexml: - case sub_serv_respsamplejson: - case sub_serv_reqsamplejson: context.setClientVersion(atof(m_defaultSvcVersion)); default: @@ -1211,24 +1239,12 @@ int EspHttpBinding::onGet(CHttpRequest* request, CHttpResponse* response) return onGetXForm(context, request, response, serviceName.str(), methodName.str()); case sub_serv_result: return onGetResult(context, request, response, serviceName.str(), methodName.str(), pathEx.str()); - case sub_serv_wsdl: - return onGetWsdl(context, request, response, serviceName.str(), methodName.str()); - case sub_serv_xsd: - return onGetXsd(context, request, response, serviceName.str(), methodName.str()); case sub_serv_instant_query: return onGetInstantQuery(context, request, response, serviceName.str(), methodName.str()); case sub_serv_soap_builder: return onGetSoapBuilder(context, request, response, serviceName.str(), methodName.str()); case sub_serv_json_builder: return onGetJsonBuilder(context, request, response, serviceName.str(), methodName.str()); - case sub_serv_reqsamplexml: - return onGetReqSampleXml(context, request, response, serviceName.str(), methodName.str()); - case sub_serv_respsamplexml: - return onGetRespSampleXml(context, request, response, serviceName.str(), methodName.str()); - case sub_serv_respsamplejson: - return onGetRespSampleJson(context, request, response, serviceName.str(), methodName.str()); - case sub_serv_reqsamplejson: - return onGetReqSampleJson(context, request, response, serviceName.str(), methodName.str()); case sub_serv_query: return onGetQuery(context, request, response, serviceName.str(), methodName.str()); case sub_serv_file_upload: diff --git a/esp/bindings/http/platform/httpbinding.hpp b/esp/bindings/http/platform/httpbinding.hpp index 93821268e5b..a52123bb0c8 100644 --- a/esp/bindings/http/platform/httpbinding.hpp +++ b/esp/bindings/http/platform/httpbinding.hpp @@ -92,6 +92,7 @@ interface IEspHttpBinding virtual int onGetSoapBuilder(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0; virtual int onGetJsonBuilder(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0; virtual int onGetReqSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0; + virtual int onGetUnrestricted(CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName, sub_service sstype)=0; virtual int onGetRespSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0; virtual int onGetRespSampleJson(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0; virtual int onGetReqSampleJson(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method)=0; @@ -325,6 +326,7 @@ class esp_http_decl EspHttpBinding : return onGet(request, response); } + virtual int onGetUnrestricted(CHttpRequest* request, CHttpResponse* response, const char *serviceName, const char *methodName, sub_service sstype); virtual int onGetReqSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method); virtual int onGetRespSampleXml(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method); virtual int onGetRespSampleJson(IEspContext &context, CHttpRequest* request, CHttpResponse* response, const char *serv, const char *method); diff --git a/esp/bindings/http/platform/httpservice.cpp b/esp/bindings/http/platform/httpservice.cpp index b23a10c0671..7e6e76542dc 100644 --- a/esp/bindings/http/platform/httpservice.cpp +++ b/esp/bindings/http/platform/httpservice.cpp @@ -379,6 +379,13 @@ int CEspHttpServer::processRequest() if (thebinding!=NULL) { + if (thebinding->isUnrestrictedSSType(stype)) + { + thebinding->onGetUnrestricted(m_request.get(), m_response.get(), serviceName.str(), methodName.str(), stype); + ctx->addTraceSummaryTimeStamp(LogMin, "handleHttp"); + return 0; + } + if(stricmp(method.str(), POST_METHOD)==0) thebinding->handleHttpPost(m_request.get(), m_response.get()); else if(!stricmp(method.str(), GET_METHOD)) From 12522586144bcb8dfb03eeedd667bb800cfabea8 Mon Sep 17 00:00:00 2001 From: Gordon Smith Date: Fri, 22 Sep 2023 14:24:21 +0100 Subject: [PATCH 04/12] Split off 8.12.56 Signed-off-by: Gordon Smith --- helm/hpcc/Chart.yaml | 4 ++-- helm/hpcc/templates/_helpers.tpl | 2 +- helm/hpcc/templates/dafilesrv.yaml | 2 +- helm/hpcc/templates/dali.yaml | 2 +- helm/hpcc/templates/dfuserver.yaml | 2 +- helm/hpcc/templates/eclagent.yaml | 4 ++-- helm/hpcc/templates/eclccserver.yaml | 4 ++-- helm/hpcc/templates/eclscheduler.yaml | 2 +- helm/hpcc/templates/esp.yaml | 2 +- helm/hpcc/templates/localroxie.yaml | 2 +- helm/hpcc/templates/roxie.yaml | 8 ++++---- helm/hpcc/templates/sasha.yaml | 2 +- helm/hpcc/templates/thor.yaml | 10 +++++----- version.cmake | 2 +- 14 files changed, 24 insertions(+), 24 deletions(-) diff --git a/helm/hpcc/Chart.yaml b/helm/hpcc/Chart.yaml index aa9da0483b9..6862cbb58c3 100644 --- a/helm/hpcc/Chart.yaml +++ b/helm/hpcc/Chart.yaml @@ -6,9 +6,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. -version: 8.12.55-closedown0 +version: 8.12.57-closedown0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. -appVersion: 8.12.55-closedown0 +appVersion: 8.12.57-closedown0 diff --git a/helm/hpcc/templates/_helpers.tpl b/helm/hpcc/templates/_helpers.tpl index 6d78db73471..20fbed8ad8d 100644 --- a/helm/hpcc/templates/_helpers.tpl +++ b/helm/hpcc/templates/_helpers.tpl @@ -1240,7 +1240,7 @@ kind: Service metadata: name: {{ $lvars.serviceName | quote }} labels: - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $.root "instance" $lvars.serviceName ) | indent 4 }} {{- if $lvars.labels }} {{ toYaml $lvars.labels | indent 4 }} diff --git a/helm/hpcc/templates/dafilesrv.yaml b/helm/hpcc/templates/dafilesrv.yaml index c15c0240080..02205069f31 100644 --- a/helm/hpcc/templates/dafilesrv.yaml +++ b/helm/hpcc/templates/dafilesrv.yaml @@ -50,7 +50,7 @@ spec: labels: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "dafilesrv" "name" "dafilesrv" "instance" .name) | indent 8 }} server: {{ .name | quote }} - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 annotations: checksum/config: {{ $configSHA }} spec: diff --git a/helm/hpcc/templates/dali.yaml b/helm/hpcc/templates/dali.yaml index 0d48da5e082..9e0dfd5d404 100644 --- a/helm/hpcc/templates/dali.yaml +++ b/helm/hpcc/templates/dali.yaml @@ -82,7 +82,7 @@ spec: run: {{ $dali.name | quote }} server: {{ $dali.name | quote }} app: dali - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8 }} {{- end }} diff --git a/helm/hpcc/templates/dfuserver.yaml b/helm/hpcc/templates/dfuserver.yaml index f80de165645..cdf28a6b7ba 100644 --- a/helm/hpcc/templates/dfuserver.yaml +++ b/helm/hpcc/templates/dfuserver.yaml @@ -56,7 +56,7 @@ spec: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "dfuserver" "name" "dfuserver" "instance" .name) | indent 8 }} run: {{ .name | quote }} accessDali: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/eclagent.yaml b/helm/hpcc/templates/eclagent.yaml index 62b213c5a6a..d0affe948f2 100644 --- a/helm/hpcc/templates/eclagent.yaml +++ b/helm/hpcc/templates/eclagent.yaml @@ -58,7 +58,7 @@ data: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" $apptype "name" "eclagent" "instance" $appJobName "instanceOf" (printf "%s-job" .me.name)) | indent 12 }} accessDali: "yes" accessEsp: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey .me "labels" }} {{ toYaml .me.labels | indent 12 }} {{- end }} @@ -137,7 +137,7 @@ spec: run: {{ .name | quote }} accessDali: "yes" accessEsp: {{ .useChildProcesses | default false | ternary "yes" "no" | quote }} - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/eclccserver.yaml b/helm/hpcc/templates/eclccserver.yaml index d4b61990cb2..ad3699917fa 100644 --- a/helm/hpcc/templates/eclccserver.yaml +++ b/helm/hpcc/templates/eclccserver.yaml @@ -57,7 +57,7 @@ data: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclccserver" "name" "eclccserver" "instance" $compileJobName "instanceOf" (printf "%s-job" .me.name)) | indent 12 }} accessDali: "yes" accessEsp: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey .me "labels" }} {{ toYaml .me.labels | indent 12 }} {{- end }} @@ -142,7 +142,7 @@ spec: run: {{ .name | quote }} accessDali: "yes" accessEsp: {{ .useChildProcesses | default false | ternary "yes" "no" | quote }} - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/eclscheduler.yaml b/helm/hpcc/templates/eclscheduler.yaml index 5cac718057a..b6970214823 100644 --- a/helm/hpcc/templates/eclscheduler.yaml +++ b/helm/hpcc/templates/eclscheduler.yaml @@ -64,7 +64,7 @@ spec: run: {{ .name | quote }} accessDali: "yes" accessEsp: "no" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/esp.yaml b/helm/hpcc/templates/esp.yaml index eab29064c0e..b34cc53d65c 100644 --- a/helm/hpcc/templates/esp.yaml +++ b/helm/hpcc/templates/esp.yaml @@ -117,7 +117,7 @@ spec: server: {{ .name | quote }} accessDali: "yes" app: {{ $application }} - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "name" $application "component" "esp" "instance" .name) | indent 8 }} {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8 }} diff --git a/helm/hpcc/templates/localroxie.yaml b/helm/hpcc/templates/localroxie.yaml index df05c1f9054..9e23fd2a0f5 100644 --- a/helm/hpcc/templates/localroxie.yaml +++ b/helm/hpcc/templates/localroxie.yaml @@ -70,7 +70,7 @@ spec: server: {{ $servername | quote }} accessDali: "yes" accessEsp: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "roxie-server" "name" "roxie" "instance" $roxie.name) | indent 8 }} {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} diff --git a/helm/hpcc/templates/roxie.yaml b/helm/hpcc/templates/roxie.yaml index 62d327bb9cc..fcfaa4f2ea1 100644 --- a/helm/hpcc/templates/roxie.yaml +++ b/helm/hpcc/templates/roxie.yaml @@ -120,7 +120,7 @@ spec: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "topology-server" "name" "roxie" "instance" $commonCtx.toponame) | indent 8 }} run: {{ $commonCtx.toponame | quote }} roxie-cluster: {{ $roxie.name | quote }} - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8}} {{- end }} @@ -180,7 +180,7 @@ kind: Service metadata: name: {{ $commonCtx.toponame | quote }} labels: - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "topology-server" "name" "roxie" "instance" $commonCtx.toponame) | indent 4 }} spec: ports: @@ -242,7 +242,7 @@ spec: roxie-cluster: {{ $roxie.name | quote }} accessDali: "yes" accessEsp: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "roxie-server" "name" "roxie" "instance" $servername) | indent 8 }} {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8}} @@ -347,7 +347,7 @@ spec: roxie-cluster: {{ $roxie.name | quote }} accessDali: "yes" accessEsp: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8}} {{- end }} diff --git a/helm/hpcc/templates/sasha.yaml b/helm/hpcc/templates/sasha.yaml index 74aa4ad82a0..bf85b0c62ec 100644 --- a/helm/hpcc/templates/sasha.yaml +++ b/helm/hpcc/templates/sasha.yaml @@ -52,7 +52,7 @@ spec: run: {{ $serviceName | quote }} server: {{ $serviceName | quote }} accessDali: {{ (has "dali" $sasha.access) | ternary "yes" "no" | quote }} - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- if hasKey $sasha "labels" }} {{ toYaml $sasha.labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/thor.yaml b/helm/hpcc/templates/thor.yaml index 5d22e77efab..434f168299b 100644 --- a/helm/hpcc/templates/thor.yaml +++ b/helm/hpcc/templates/thor.yaml @@ -82,7 +82,7 @@ data: labels: accessDali: "yes" accessEsp: "yes" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclagent" "name" "thor" "instance" $eclAgentJobName "instanceOf" (printf "%s-job" .eclAgentName)) | indent 8 }} {{- if hasKey .me "labels" }} {{ toYaml .me.labels | indent 12 }} @@ -149,7 +149,7 @@ data: accessEsp: "yes" app: "thor" component: "thormanager" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 instance: "_HPCC_JOBNAME_" job: "_HPCC_JOBNAME_" {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "thormanager" "name" "thor" "instance" $thorManagerJobName "instanceOf" (printf "%s-thormanager-job" .me.name)) | indent 12 }} @@ -218,7 +218,7 @@ data: accessEsp: "yes" app: "thor" component: "thorworker" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 instance: "_HPCC_JOBNAME_" job: "_HPCC_JOBNAME_" {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "thorworker" "name" "thor" "instance" $thorWorkerJobName "instanceOf" (printf "%s-thorworker-job" .me.name)) | indent 12 }} @@ -353,7 +353,7 @@ spec: accessEsp: {{ $commonCtx.eclAgentUseChildProcesses | ternary "yes" "no" | quote }} app: "thor" component: "thor-eclagent" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 instance: {{ $commonCtx.eclAgentName | quote }} {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclagent" "name" "thor" "instance" $commonCtx.eclAgentName ) | indent 8 }} {{- if hasKey $commonCtx.me "labels" }} @@ -418,7 +418,7 @@ spec: accessEsp: "no" app: "thor" component: "thor-thoragent" - helmVersion: 8.12.55-closedown0 + helmVersion: 8.12.57-closedown0 instance: {{ $commonCtx.thorAgentName | quote }} {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclagent" "name" "thor" "instance" $commonCtx.thorAgentName ) | indent 8 }} {{- if hasKey $commonCtx.me "labels" }} diff --git a/version.cmake b/version.cmake index c8af42d64c6..97d35708537 100644 --- a/version.cmake +++ b/version.cmake @@ -5,7 +5,7 @@ set ( HPCC_NAME "Community Edition" ) set ( HPCC_PROJECT "community" ) set ( HPCC_MAJOR 8 ) set ( HPCC_MINOR 12 ) -set ( HPCC_POINT 55 ) +set ( HPCC_POINT 57 ) set ( HPCC_MATURITY "closedown" ) set ( HPCC_SEQUENCE 0 ) ### From cbb5ae2fd386216e00c014e705613bdf15c5fc08 Mon Sep 17 00:00:00 2001 From: Gordon Smith Date: Fri, 22 Sep 2023 14:26:32 +0100 Subject: [PATCH 05/12] Split off 9.0.46 Signed-off-by: Gordon Smith --- helm/hpcc/Chart.yaml | 4 ++-- helm/hpcc/templates/_helpers.tpl | 2 +- helm/hpcc/templates/dafilesrv.yaml | 2 +- helm/hpcc/templates/dali.yaml | 2 +- helm/hpcc/templates/dfuserver.yaml | 2 +- helm/hpcc/templates/eclagent.yaml | 4 ++-- helm/hpcc/templates/eclccserver.yaml | 4 ++-- helm/hpcc/templates/eclscheduler.yaml | 2 +- helm/hpcc/templates/esp.yaml | 2 +- helm/hpcc/templates/localroxie.yaml | 2 +- helm/hpcc/templates/roxie.yaml | 8 ++++---- helm/hpcc/templates/sasha.yaml | 2 +- helm/hpcc/templates/thor.yaml | 10 +++++----- version.cmake | 2 +- 14 files changed, 24 insertions(+), 24 deletions(-) diff --git a/helm/hpcc/Chart.yaml b/helm/hpcc/Chart.yaml index 1ac81bfe533..f359b07e9dd 100644 --- a/helm/hpcc/Chart.yaml +++ b/helm/hpcc/Chart.yaml @@ -6,9 +6,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. -version: 9.0.45-closedown0 +version: 9.0.47-closedown0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. -appVersion: 9.0.45-closedown0 +appVersion: 9.0.47-closedown0 diff --git a/helm/hpcc/templates/_helpers.tpl b/helm/hpcc/templates/_helpers.tpl index 11789159890..976e8f0bca9 100644 --- a/helm/hpcc/templates/_helpers.tpl +++ b/helm/hpcc/templates/_helpers.tpl @@ -1314,7 +1314,7 @@ kind: Service metadata: name: {{ $lvars.serviceName | quote }} labels: - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $.root "instance" $lvars.serviceName ) | indent 4 }} {{- if $lvars.labels }} {{ toYaml $lvars.labels | indent 4 }} diff --git a/helm/hpcc/templates/dafilesrv.yaml b/helm/hpcc/templates/dafilesrv.yaml index 0ce4da74ba7..48632e71b85 100644 --- a/helm/hpcc/templates/dafilesrv.yaml +++ b/helm/hpcc/templates/dafilesrv.yaml @@ -50,7 +50,7 @@ spec: labels: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "dafilesrv" "name" "dafilesrv" "instance" .name) | indent 8 }} server: {{ .name | quote }} - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 annotations: checksum/config: {{ $configSHA }} spec: diff --git a/helm/hpcc/templates/dali.yaml b/helm/hpcc/templates/dali.yaml index 979b27a8f67..50defb1fc3f 100644 --- a/helm/hpcc/templates/dali.yaml +++ b/helm/hpcc/templates/dali.yaml @@ -82,7 +82,7 @@ spec: run: {{ $dali.name | quote }} server: {{ $dali.name | quote }} app: dali - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8 }} {{- end }} diff --git a/helm/hpcc/templates/dfuserver.yaml b/helm/hpcc/templates/dfuserver.yaml index 7b256901ce3..f1647d0414d 100644 --- a/helm/hpcc/templates/dfuserver.yaml +++ b/helm/hpcc/templates/dfuserver.yaml @@ -56,7 +56,7 @@ spec: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "dfuserver" "name" "dfuserver" "instance" .name) | indent 8 }} run: {{ .name | quote }} accessDali: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/eclagent.yaml b/helm/hpcc/templates/eclagent.yaml index 04f5b8bfb3e..2cc9aaca656 100644 --- a/helm/hpcc/templates/eclagent.yaml +++ b/helm/hpcc/templates/eclagent.yaml @@ -58,7 +58,7 @@ data: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" $apptype "name" "eclagent" "instance" $appJobName "instanceOf" (printf "%s-job" .me.name)) | indent 12 }} accessDali: "yes" accessEsp: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey .me "labels" }} {{ toYaml .me.labels | indent 12 }} {{- end }} @@ -135,7 +135,7 @@ spec: run: {{ .name | quote }} accessDali: "yes" accessEsp: {{ .useChildProcesses | default false | ternary "yes" "no" | quote }} - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/eclccserver.yaml b/helm/hpcc/templates/eclccserver.yaml index 2022c3c19fe..be5bc048659 100644 --- a/helm/hpcc/templates/eclccserver.yaml +++ b/helm/hpcc/templates/eclccserver.yaml @@ -57,7 +57,7 @@ data: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclccserver" "name" "eclccserver" "instance" $compileJobName "instanceOf" (printf "%s-job" .me.name)) | indent 12 }} accessDali: "yes" accessEsp: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey .me "labels" }} {{ toYaml .me.labels | indent 12 }} {{- end }} @@ -142,7 +142,7 @@ spec: run: {{ .name | quote }} accessDali: "yes" accessEsp: {{ .useChildProcesses | default false | ternary "yes" "no" | quote }} - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/eclscheduler.yaml b/helm/hpcc/templates/eclscheduler.yaml index 9adfb6883b2..f666d00a07f 100644 --- a/helm/hpcc/templates/eclscheduler.yaml +++ b/helm/hpcc/templates/eclscheduler.yaml @@ -64,7 +64,7 @@ spec: run: {{ .name | quote }} accessDali: "yes" accessEsp: "no" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/esp.yaml b/helm/hpcc/templates/esp.yaml index d56547933cd..c832dfe3911 100644 --- a/helm/hpcc/templates/esp.yaml +++ b/helm/hpcc/templates/esp.yaml @@ -117,7 +117,7 @@ spec: server: {{ .name | quote }} accessDali: "yes" app: {{ $application }} - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "name" $application "component" "esp" "instance" .name) | indent 8 }} {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8 }} diff --git a/helm/hpcc/templates/localroxie.yaml b/helm/hpcc/templates/localroxie.yaml index a1ce07aee1d..e8895ac1b97 100644 --- a/helm/hpcc/templates/localroxie.yaml +++ b/helm/hpcc/templates/localroxie.yaml @@ -70,7 +70,7 @@ spec: server: {{ $servername | quote }} accessDali: "yes" accessEsp: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "roxie-server" "name" "roxie" "instance" $roxie.name) | indent 8 }} {{- if hasKey . "labels" }} {{ toYaml .labels | indent 8 }} diff --git a/helm/hpcc/templates/roxie.yaml b/helm/hpcc/templates/roxie.yaml index e8420fd3008..6740dbac224 100644 --- a/helm/hpcc/templates/roxie.yaml +++ b/helm/hpcc/templates/roxie.yaml @@ -120,7 +120,7 @@ spec: {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "topology-server" "name" "roxie" "instance" $commonCtx.toponame) | indent 8 }} run: {{ $commonCtx.toponame | quote }} roxie-cluster: {{ $roxie.name | quote }} - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8}} {{- end }} @@ -180,7 +180,7 @@ kind: Service metadata: name: {{ $commonCtx.toponame | quote }} labels: - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "topology-server" "name" "roxie" "instance" $commonCtx.toponame) | indent 4 }} spec: ports: @@ -242,7 +242,7 @@ spec: roxie-cluster: {{ $roxie.name | quote }} accessDali: "yes" accessEsp: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "roxie-server" "name" "roxie" "instance" $servername) | indent 8 }} {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8}} @@ -347,7 +347,7 @@ spec: roxie-cluster: {{ $roxie.name | quote }} accessDali: "yes" accessEsp: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey $.Values.global "metrics" }} {{- include "hpcc.generateMetricsReporterLabel" $.Values.global.metrics | nindent 8}} {{- end }} diff --git a/helm/hpcc/templates/sasha.yaml b/helm/hpcc/templates/sasha.yaml index 1fbb14d81ba..5aa00550022 100644 --- a/helm/hpcc/templates/sasha.yaml +++ b/helm/hpcc/templates/sasha.yaml @@ -52,7 +52,7 @@ spec: run: {{ $serviceName | quote }} server: {{ $serviceName | quote }} accessDali: {{ (has "dali" $sasha.access) | ternary "yes" "no" | quote }} - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- if hasKey $sasha "labels" }} {{ toYaml $sasha.labels | indent 8 }} {{- end }} diff --git a/helm/hpcc/templates/thor.yaml b/helm/hpcc/templates/thor.yaml index ebaa8b39a8f..2fbac3ee793 100644 --- a/helm/hpcc/templates/thor.yaml +++ b/helm/hpcc/templates/thor.yaml @@ -82,7 +82,7 @@ data: labels: accessDali: "yes" accessEsp: "yes" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclagent" "name" "thor" "instance" $eclAgentJobName "instanceOf" (printf "%s-job" .eclAgentName)) | indent 8 }} {{- if hasKey .me "labels" }} {{ toYaml .me.labels | indent 12 }} @@ -147,7 +147,7 @@ data: accessEsp: "yes" app: "thor" component: "thormanager" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 instance: "_HPCC_JOBNAME_" job: "_HPCC_JOBNAME_" {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "thormanager" "name" "thor" "instance" $thorManagerJobName "instanceOf" (printf "%s-thormanager-job" .me.name)) | indent 12 }} @@ -214,7 +214,7 @@ data: accessEsp: "yes" app: "thor" component: "thorworker" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 instance: "_HPCC_JOBNAME_" job: "_HPCC_JOBNAME_" {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "thorworker" "name" "thor" "instance" $thorWorkerJobName "instanceOf" (printf "%s-thorworker-job" .me.name)) | indent 12 }} @@ -347,7 +347,7 @@ spec: accessEsp: {{ $commonCtx.eclAgentUseChildProcesses | ternary "yes" "no" | quote }} app: "thor" component: "thor-eclagent" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 instance: {{ $commonCtx.eclAgentName | quote }} {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclagent" "name" "thor" "instance" $commonCtx.eclAgentName ) | indent 8 }} {{- if hasKey $commonCtx.me "labels" }} @@ -412,7 +412,7 @@ spec: accessEsp: "no" app: "thor" component: "thor-thoragent" - helmVersion: 9.0.45-closedown0 + helmVersion: 9.0.47-closedown0 instance: {{ $commonCtx.thorAgentName | quote }} {{- include "hpcc.addStandardLabels" (dict "root" $ "component" "eclagent" "name" "thor" "instance" $commonCtx.thorAgentName ) | indent 8 }} {{- if hasKey $commonCtx.me "labels" }} diff --git a/version.cmake b/version.cmake index d6726e752c2..e5c555bc5d4 100644 --- a/version.cmake +++ b/version.cmake @@ -5,7 +5,7 @@ set ( HPCC_NAME "Community Edition" ) set ( HPCC_PROJECT "community" ) set ( HPCC_MAJOR 9 ) set ( HPCC_MINOR 0 ) -set ( HPCC_POINT 45 ) +set ( HPCC_POINT 47 ) set ( HPCC_MATURITY "closedown" ) set ( HPCC_SEQUENCE 0 ) ### From d68eb8a71ac5cd9cac2ef3cc0cd96e8a2e3c734d Mon Sep 17 00:00:00 2001 From: Jim DeFabia Date: Thu, 21 Sep 2023 13:11:20 -0400 Subject: [PATCH 06/12] HPCC-18650 Document LABEL attribute on INDEPENDENT, PERSIST, FAILURE, & SUCCESS Signed-off-by: Jim DeFabia --- .../ECLR_mods/WkFlo-FAILURE.xml | 20 +++++++++++-- .../ECLR_mods/WkFlo-INDEPENDENT.xml | 28 +++++++++++++++---- .../ECLR_mods/WkFlo-PERSIST.xml | 20 +++++++++++-- .../ECLR_mods/WkFlo-SUCCESS.xml | 20 +++++++++++-- 4 files changed, 76 insertions(+), 12 deletions(-) diff --git a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-FAILURE.xml b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-FAILURE.xml index 3d4b0ebb335..842719df639 100644 --- a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-FAILURE.xml +++ b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-FAILURE.xml @@ -8,9 +8,10 @@ : FAILURE FAILURE (handler) + role="bold">) [,LABEL(text)] FAILURE workflow service - ; + ; @@ -36,6 +37,21 @@ The action to run if the expression fails. + + + LABEL + + Optional. Defines the Text to display + for the workflow item in the Graph for the workunit. If omitted, + the code generator will deduce a label from the identifier being + defined. + + + + text + + A string constant containing the text to display. + diff --git a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-INDEPENDENT.xml b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-INDEPENDENT.xml index 81766013906..a226c545680 100644 --- a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-INDEPENDENT.xml +++ b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-INDEPENDENT.xml @@ -6,12 +6,13 @@ attribute := expression : INDEPENDENT - [(cluster)] - - INDEPENDENT - + [(cluster [,LABEL(text)])]; INDEPENDENT workflow service - ; + + INDEPENDENT + @@ -40,6 +41,21 @@ attribute is run on the currently executing cluster. + + + LABEL + + Optional. Defines the Text to display + for the workflow item in the Graph for the workunit. If omitted, + the code generator will deduce a label from the identifier being + defined. + + + + text + + A string constant containing the text to display. + @@ -59,7 +75,7 @@ Example: - I := RANDOM() : INDEPENDENT; //calculated once, period + I := RANDOM() : INDEPENDENT(LABEL('CalcRandom')); //calculated once, period G := RANDOM() : GLOBAL; //calculated once in each graph ds := diff --git a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-PERSIST.xml b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-PERSIST.xml index cbc1dd33cfc..93b355e7be4 100644 --- a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-PERSIST.xml +++ b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-PERSIST.xml @@ -23,9 +23,10 @@ | MULTIPLE MULTIPLE [(count)]] ) + role="bold">)]] [,LABEL(text)]); PERSIST workflow service - ; + @@ -155,6 +156,21 @@ omitted, the system default is used. If set to -1, then an unlimited number are kept. + + + LABEL + + Optional. Defines the Text to display + for the workflow item in the Graph for the workunit. If omitted, + the code generator will deduce a label from the identifier being + defined. + + + + text + + A string constant containing the text to display. + diff --git a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-SUCCESS.xml b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-SUCCESS.xml index 2114bf74bb5..9a90211cbf3 100644 --- a/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-SUCCESS.xml +++ b/docs/EN_US/ECLLanguageReference/ECLR_mods/WkFlo-SUCCESS.xml @@ -8,9 +8,10 @@ : SUCCESS SUCCESS (handler) + role="bold">) [,LABEL(text)]; SUCCESS workflow service - ; + @@ -36,6 +37,21 @@ The action to run if the expression succeeds. + + + LABEL + + Optional. Defines the Text to display + for the workflow item in the Graph for the workunit. If omitted, + the code generator will deduce a label from the identifier being + defined. + + + + text + + A string constant containing the text to display. + From b22ee762312b62a618efbe227f65f09791b321d3 Mon Sep 17 00:00:00 2001 From: Gordon Smith Date: Tue, 26 Sep 2023 17:07:36 +0100 Subject: [PATCH 07/12] HPCC-30364 GH Action running out of diskspace Signed-off-by: Gordon Smith --- .github/workflows/build-and-publish-debug.yml | 3 +++ .github/workflows/build-and-publish.yml | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/build-and-publish-debug.yml b/.github/workflows/build-and-publish-debug.yml index 3b32b2ebe44..e50caded83d 100644 --- a/.github/workflows/build-and-publish-debug.yml +++ b/.github/workflows/build-and-publish-debug.yml @@ -18,6 +18,9 @@ jobs: runs-on: ubuntu-20.04 if: github.repository == 'hpcc-systems/HPCC-Platform' steps: + - name: Free additional disk space (remove Android SDK + Tools) + run: | + sudo rm -rf /usr/local/lib/android - name: Checkout uses: actions/checkout@v2 - name: Build diff --git a/.github/workflows/build-and-publish.yml b/.github/workflows/build-and-publish.yml index 2d09d008f2e..598e540198d 100644 --- a/.github/workflows/build-and-publish.yml +++ b/.github/workflows/build-and-publish.yml @@ -18,6 +18,9 @@ jobs: runs-on: ubuntu-20.04 if: github.repository == 'hpcc-systems/HPCC-Platform' steps: + - name: Free additional disk space (remove Android SDK + Tools) + run: | + sudo rm -rf /usr/local/lib/android - name: Checkout uses: actions/checkout@v2 - name: Build @@ -41,6 +44,9 @@ jobs: matrix: engine: ['ml', 'gnn', 'gnn-gpu'] steps: + - name: Free additional disk space (remove Android SDK + Tools) + run: | + sudo rm -rf /usr/local/lib/android - name: Checkout uses: actions/checkout@v2 - name: Build @@ -58,6 +64,9 @@ jobs: runs-on: ubuntu-20.04 if: github.repository == 'hpcc-systems/HPCC-Platform' steps: + - name: Free additional disk space (remove Android SDK + Tools) + run: | + sudo rm -rf /usr/local/lib/android - name: Checkout uses: actions/checkout@v2 - name: Build From 4426e9dfd4b2e3172c840e1e75ecc800fe1b3b66 Mon Sep 17 00:00:00 2001 From: g-pan Date: Mon, 25 Sep 2023 17:37:54 -0400 Subject: [PATCH 08/12] HPCC-28033 Document CORS Section of values.yaml Signed-off-by: g-pan --- .../ContainerizedMods/ConfigureValues.xml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/EN_US/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml b/docs/EN_US/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml index a8d5d801290..e7349941fa8 100644 --- a/docs/EN_US/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml +++ b/docs/EN_US/ContainerizedHPCC/ContainerizedMods/ConfigureValues.xml @@ -1023,6 +1023,41 @@ thor: categories, including the "ecl" category, are read internally by system components and not exposed directly to ECL code. + + + Cross Origin Resource Handling + + Cross-origin resource sharing (CORS) is a mechanism for + integrating applications in different domains. CORS defines how client + web applications in one domain can interact with resources in another + domain. You can configure CORS support settings in the ESP section of + the values.yaml file as illustrated below: + + esp: +- name: eclwatch + application: eclwatch + auth: ldap + replicas: 1 + # The following 'corsAllowed' section is used to configure CORS support + # origin - the origin to support CORS requests from + # headers - the headers to allow for the given origin via CORS + # methods - the HTTP methods to allow for the given origin via CORS + # + corsAllowed: + # origin starting with https will only allow https CORS + - origin: https://*.example2.com + headers: + - "X-Custom-Header" + methods: + - "GET" + # origin starting with http will allow http or https CORS + - origin: http://www.example.com + headers: + - "*" + methods: + - "GET" + - "POST" + From dfc67b62a6c6b57671c42f6edccf79ba1de984f9 Mon Sep 17 00:00:00 2001 From: wangkx Date: Wed, 27 Sep 2023 10:39:05 -0400 Subject: [PATCH 09/12] HPCC-30360 Allow empty kind attribute when listing Groups Signed-off-by: wangkx --- esp/smc/SMCLib/TpWrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esp/smc/SMCLib/TpWrapper.cpp b/esp/smc/SMCLib/TpWrapper.cpp index 819a5f1e4a3..b4c054a6714 100644 --- a/esp/smc/SMCLib/TpWrapper.cpp +++ b/esp/smc/SMCLib/TpWrapper.cpp @@ -1217,7 +1217,7 @@ void CTpWrapper::getGroupList(double espVersion, const char* kindReq, IArrayOfquery(); const char* kind = group.queryProp("@kind"); - if (kindReq && *kindReq && !strieq(kindReq, kind)) + if (!isEmptyString(kindReq) && !strisame(kindReq, kind)) continue; IEspTpGroup* pGroup = createTpGroup("",""); From 2e7912a436dc196afb0b794f29211dd7ea93dd2f Mon Sep 17 00:00:00 2001 From: Jake Smith Date: Wed, 27 Sep 2023 22:05:30 +0100 Subject: [PATCH 10/12] HPCC-30391 Check pod skew for 1st job, and report for each. Signed-off-by: Jake Smith --- system/jlib/jstats.h | 2 +- thorlcr/master/thgraphmanager.cpp | 137 ++++++++++++++++++------------ 2 files changed, 86 insertions(+), 53 deletions(-) diff --git a/system/jlib/jstats.h b/system/jlib/jstats.h index 5a278dce8e8..503ae25a612 100644 --- a/system/jlib/jstats.h +++ b/system/jlib/jstats.h @@ -544,7 +544,7 @@ class jlib_decl CRuntimeStatisticCollection #ifdef _DEBUG ,ignoreUnknown(_ignoreUnknown) #endif -{ + { unsigned num = mapping.numStatistics(); values = new CRuntimeStatistic[num+1]; // extra entry is to gather unexpected stats and avoid tests when accumulating } diff --git a/thorlcr/master/thgraphmanager.cpp b/thorlcr/master/thgraphmanager.cpp index 771ad01c38a..3e4f6d21f36 100644 --- a/thorlcr/master/thgraphmanager.cpp +++ b/thorlcr/master/thgraphmanager.cpp @@ -57,6 +57,8 @@ #include "securesocket.hpp" #include "environment.hpp" +static const StatisticsMapping podStatistics({StNumPods}); + class CJobManager : public CSimpleInterface, implements IJobManager, implements IExceptionHandler { bool stopped, handlingConversation; @@ -67,7 +69,81 @@ class CJobManager : public CSimpleInterface, implements IJobManager, implements Owned jobq; ICopyArrayOf jobs; Owned exitException; - + class CPodInfo + { + unsigned wfid = 0; + StringAttr wuid, graphName; + + unsigned __int64 min = 0; + unsigned __int64 max = 0; + unsigned minNode = 0; + unsigned maxNode = 0; + double stdDev = 0; + CRuntimeSummaryStatisticCollection podStats; + std::vector nodeNames; // ordered list of the unique node names + bool collectAttempted = false; + + public: + CPodInfo() : podStats(podStatistics) + { + } + void setContext(unsigned _wfid, const char *_wuid, const char *_graphName) + { + wfid = _wfid; + wuid.set(_wuid); + graphName.set(_graphName); + } + bool hasStdDev() const + { + return 0 != stdDev; + } + void ensureCollected() + { + // collate pod distribution + if (collectAttempted) + return; + collectAttempted = true; + try + { + VStringBuffer selector("thorworker-job-%s-%s", wuid.get(), graphName.get()); + std::vector> pods = k8s::getPodNodes(selector.toLowerCase()); + std::unordered_map podPerNodeCounts; + for (const auto &podNode: pods) + { + const std::string &node = podNode[1]; // pod is 1st item, node is 2nd + podPerNodeCounts[node]++; // NB: if doesn't exist is created with default value of 0 1st + } + for (const auto &node: podPerNodeCounts) + { + podStats.mergeStatistic(StNumPods, node.second, nodeNames.size()); + nodeNames.push_back(node.first); + } + stdDev = podStats.queryStdDevInfo(StNumPods, min, max, minNode, maxNode); + } + catch (IException *e) + { + EXCLOG(e); + e->Release(); + } + } + void report(IWorkUnit *wu) + { + // issue warning and publish pod distribution stats + Owned collector = createGlobalStatisticGatherer(wu); + StatsScopeId wfidScopeId(SSTworkflow, wfid); + StatsScopeId graphScopeId(graphName); + collector->beginScope(wfidScopeId); + collector->beginScope(graphScopeId); + podStats.recordStatistics(*collector, false); + + StringBuffer scopeStr; + wfidScopeId.getScopeText(scopeStr).append(':'); + graphScopeId.getScopeText(scopeStr); + Owned e = makeStringExceptionV(-1, "%s: Degraded performance. Worker pods are unevenly distributed over nodes. StdDev=%.2f. min node(%s) has %" I64F "u pods, max node(%s) has %" I64F "u pods", scopeStr.str(), stdDev, nodeNames[minNode].c_str(), min, nodeNames[maxNode].c_str(), max); + reportExceptionToWorkunit(*wu, e); + } + } podInfo; + Owned demonServer; std::atomic activeTasks; StringAttr currentWuid; @@ -260,6 +336,7 @@ class CJobManager : public CSimpleInterface, implements IJobManager, implements virtual void updateWorkUnitLog(IWorkUnit &workunit); }; + // CJobManager impl. CJobManager::CJobManager(ILogMsgHandler *_logHandler) : logHandler(_logHandler) @@ -1023,41 +1100,13 @@ bool CJobManager::executeGraph(IConstWorkUnit &workunit, const char *graphName, ~CounterBlock() { --counter; } } cBlock(activeTasks); + if (isContainerized()) { -#ifdef _CONTAINERIZED - double stdDev = 0.0; - unsigned __int64 min, max; - unsigned minNode, maxNode; - const StatisticsMapping podStatistics({StNumPods}); - CRuntimeSummaryStatisticCollection podStats(podStatistics); - std::vector nodeNames; // ordered list of the unique node names - try - { - // collate pod distribution - VStringBuffer selector("thorworker-job-%s-%s", wuid.get(), graphName); - std::vector> pods = k8s::getPodNodes(selector.toLowerCase()); - std::unordered_map podPerNodeCounts; - for (const auto &podNode: pods) - { - const std::string &node = podNode[1]; // pod is 1st item, node is 2nd - podPerNodeCounts[node]++; // NB: if doesn't exist is created with default value of 0 1st - } - for (const auto &node: podPerNodeCounts) - { - podStats.mergeStatistic(StNumPods, node.second, nodeNames.size()); - nodeNames.push_back(node.first); - } - stdDev = podStats.queryStdDevInfo(StNumPods, min, max, minNode, maxNode); - } - catch (IException *e) - { - EXCLOG(e); - e->Release(); - } - - // calculate the above, before locking the workunit below to avoid holding lock whilst issuing getPodNodes call -#endif + podInfo.setContext(wfid, wuid, graphName); + podInfo.ensureCollected(); // will collect pod info the 1st run only, since they remain the same for subsequent jobs this Thor runs + } + { Owned wu = &workunit.lock(); wu->setStatistic(queryStatisticsComponentType(), queryStatisticsComponentName(), SSTgraph, graphScope, StWhenStarted, NULL, startTs, 1, 0, StatsMergeAppend); //Could use addTimeStamp(wu, SSTgraph, graphName, StWhenStarted, wfid) if start time could be this point @@ -1065,24 +1114,8 @@ bool CJobManager::executeGraph(IConstWorkUnit &workunit, const char *graphName, VStringBuffer version("%d.%d", THOR_VERSION_MAJOR, THOR_VERSION_MINOR); wu->setDebugValue("ThorVersion", version.str(), true); -#ifdef _CONTAINERIZED - // issue warning and publish pod distribution stats, if any stddev - if (stdDev) - { - Owned collector = createGlobalStatisticGatherer(wu); - StatsScopeId wfidScopeId(SSTworkflow, wfid); - StatsScopeId graphScopeId(graphName); - collector->beginScope(wfidScopeId); - collector->beginScope(graphScopeId); - podStats.recordStatistics(*collector, false); - - StringBuffer scopeStr; - wfidScopeId.getScopeText(scopeStr).append(':'); - graphScopeId.getScopeText(scopeStr); - Owned e = makeStringExceptionV(-1, "%s: Degraded performance. Worker pods are unevenly distributed over nodes. StdDev=%.2f. min node(%s) has %" I64F "u pods, max node(%s) has %" I64F "u pods", scopeStr.str(), stdDev, nodeNames[minNode].c_str(), min, nodeNames[maxNode].c_str(), max); - reportExceptionToWorkunit(*wu, e); - } -#endif + if (isContainerized() && podInfo.hasStdDev()) + podInfo.report(wu); } setWuid(workunit.queryWuid(), workunit.queryClusterName()); From 0a7ee5b825c5ee3859c8dbc7a2c2a8dce1168778 Mon Sep 17 00:00:00 2001 From: Jake Smith Date: Thu, 28 Sep 2023 10:05:41 +0100 Subject: [PATCH 11/12] HPCC-30390 Improve get dafilesrv service errors Signed-off-by: Jake Smith --- system/jlib/jerror.hpp | 1 + system/jlib/jmisc.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/system/jlib/jerror.hpp b/system/jlib/jerror.hpp index 1ab11623d89..264c33ed3a3 100644 --- a/system/jlib/jerror.hpp +++ b/system/jlib/jerror.hpp @@ -33,6 +33,7 @@ #define JLIBERR_InternalError 6002 #define JLIBERR_CppCompileError 6003 #define JLIBERR_UnexpectedValue 6004 +#define JLIBERR_K8sServiceError 6005 //---- Text for all errors (make it easy to internationalise) --------------------------- diff --git a/system/jlib/jmisc.cpp b/system/jlib/jmisc.cpp index 994d691b1c2..6fa8e1f8e35 100644 --- a/system/jlib/jmisc.cpp +++ b/system/jlib/jmisc.cpp @@ -1084,17 +1084,17 @@ std::pair getDafileServiceFromConfig(const char *applicat VStringBuffer serviceXPath("services[@type='%s']", application); Owned dafilesrvServices = getGlobalConfigSP()->getElements(serviceXPath); if (!dafilesrvServices->first()) - throw makeStringException(-1, "dafilesrv service not defined"); + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' not defined or disabled", application); const IPropertyTree &dafilesrv = dafilesrvServices->query(); if (!dafilesrv.getPropBool("@public")) - throw makeStringException(-1, "dafilesrv service has no public service defined"); + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' has no public service defined", application); StringBuffer dafilesrvName; dafilesrv.getProp("@name", dafilesrvName); auto externalService = getExternalService(dafilesrvName); if (externalService.first.empty()) - throw makeStringExceptionV(-1, "dafilesrv '%s': external service not found", dafilesrvName.str()); + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' - external service '%s' not found", application, dafilesrvName.str()); if (0 == externalService.second) - throw makeStringExceptionV(-1, "dafilesrv '%s': external service port not defined", dafilesrvName.str()); + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' - external service '%s' port not defined", application, dafilesrvName.str()); return externalService; } From 42fbde6d55047a298fabd7f63a692af2a4924c5a Mon Sep 17 00:00:00 2001 From: Jake Smith Date: Thu, 28 Sep 2023 10:24:12 +0100 Subject: [PATCH 12/12] HPCC-30390 move k8s functions into jcontainerized Signed-off-by: Jake Smith --- dali/base/dautils.cpp | 3 +- esp/clients/ws_dfsclient/ws_dfsclient.cpp | 3 +- esp/services/ws_dfu/ws_dfuService.cpp | 5 +- system/jlib/jcontainerized.cpp | 96 +++++++++++++++++++++++ system/jlib/jcontainerized.hpp | 7 ++ system/jlib/jmisc.cpp | 94 ---------------------- system/jlib/jmisc.hpp | 8 -- 7 files changed, 110 insertions(+), 106 deletions(-) diff --git a/dali/base/dautils.cpp b/dali/base/dautils.cpp index f14a8df714a..fe3eb7fcb0a 100644 --- a/dali/base/dautils.cpp +++ b/dali/base/dautils.cpp @@ -17,6 +17,7 @@ #include "platform.h" #include "jlib.hpp" +#include "jcontainerized.hpp" #include "jstring.hpp" #include "jfile.hpp" #include "jmisc.hpp" @@ -3628,7 +3629,7 @@ void remapGroupsToDafilesrv(IPropertyTree *file, INamedGroupStore *resolver) CriticalBlock b(dafileSrvNodeCS); if (nullptr == dafileSrvNode) { - auto externalService = getDafileServiceFromConfig("directio"); + auto externalService = k8s::getDafileServiceFromConfig("directio"); VStringBuffer dafilesrvEpStr("%s:%u", externalService.first.c_str(), externalService.second); dafileSrvNode.setown(createINode(dafilesrvEpStr)); } diff --git a/esp/clients/ws_dfsclient/ws_dfsclient.cpp b/esp/clients/ws_dfsclient/ws_dfsclient.cpp index a1d0f544f2d..ad0c2f37fd5 100644 --- a/esp/clients/ws_dfsclient/ws_dfsclient.cpp +++ b/esp/clients/ws_dfsclient/ws_dfsclient.cpp @@ -18,6 +18,7 @@ #include #include "jliball.hpp" +#include "jcontainerized.hpp" #include "jflz.hpp" #include "jsecrets.hpp" #include "seclib.hpp" @@ -726,7 +727,7 @@ IDFSFile *lookupDFSFile(const char *logicalName, AccessMode accessMode, unsigned const IPropertyTree &eclWatch = eclWatchServices->query(); StringBuffer eclWatchName; eclWatch.getProp("@name", eclWatchName); - auto result = getExternalService(eclWatchName); + auto result = k8s::getExternalService(eclWatchName); if (result.first.empty()) throw makeStringExceptionV(-1, "dfs '%s': service not found", eclWatchName.str()); if (0 == result.second) diff --git a/esp/services/ws_dfu/ws_dfuService.cpp b/esp/services/ws_dfu/ws_dfuService.cpp index 4dcfd29b947..068394cc171 100644 --- a/esp/services/ws_dfu/ws_dfuService.cpp +++ b/esp/services/ws_dfu/ws_dfuService.cpp @@ -19,6 +19,7 @@ #include +#include "jcontainerized.hpp" #include "daclient.hpp" #include "daft.hpp" #include "daftcfg.hpp" @@ -6116,7 +6117,7 @@ void CWsDfuEx::dFUFileAccessCommon(IEspContext &context, const CDfsLogicalFileNa if (!info) throw makeStringExceptionV(-1, "dFUFileAccessCommon: file signing certificate ('%s') not defined in configuration.", keyPairName.str()); - auto externalService = getDafileServiceFromConfig("stream"); + auto externalService = k8s::getDafileServiceFromConfig("stream"); dafilesrvHost.set(externalService.first.c_str()); port = externalService.second; secure = true; @@ -6498,7 +6499,7 @@ bool CWsDfuEx::onDFUFileCreateV2(IEspContext &context, IEspDFUFileCreateV2Reques fileDesc.setown(createFileDescriptor(tempFileName, planeName, numParts)); numParts = fileDesc->numParts(); - auto externalService = getDafileServiceFromConfig("stream"); + auto externalService = k8s::getDafileServiceFromConfig("stream"); dafilesrvHost.set(externalService.first.c_str()); port = externalService.second; secure = true; diff --git a/system/jlib/jcontainerized.cpp b/system/jlib/jcontainerized.cpp index 093e647834b..3b9724e2682 100644 --- a/system/jlib/jcontainerized.cpp +++ b/system/jlib/jcontainerized.cpp @@ -11,6 +11,7 @@ limitations under the License. ############################################################################## */ +#include "jerror.hpp" #include "jexcept.hpp" #include "jfile.hpp" #include "jmisc.hpp" @@ -292,6 +293,101 @@ std::vector> getPodNodes(const char *selector) } } +void runKubectlCommand(const char *title, const char *cmd, const char *input, StringBuffer *output) +{ +#ifndef _CONTAINERIZED + UNIMPLEMENTED_X("runKubectlCommand"); +#endif +// NB: will fire an exception if command fails (returns non-zero exit code) + + StringBuffer _output, error; + if (!output) + output = &_output; + unsigned ret = runExternalCommand(title, *output, error, cmd, input, ".", nullptr); + if (output->length()) + MLOG(MCdebugInfo, unknownJob, "%s: ret=%u, stdout=%s", cmd, ret, output->trimRight().str()); + if (error.length()) + MLOG(MCdebugError, unknownJob, "%s: ret=%u, stderr=%s", cmd, ret, error.trimRight().str()); + if (ret) + { + if (input) + MLOG(MCdebugError, unknownJob, "Using input %s", input); + throw makeStringExceptionV(0, "Failed to run %s: error %u: %s", cmd, ret, error.str()); + } +} + +static CTimeLimitedCache> externalServiceCache; +static CriticalSection externalServiceCacheCrit; +std::pair getExternalService(const char *serviceName) +{ +#ifndef _CONTAINERIZED + UNIMPLEMENTED_X("getExternalService"); +#endif + { + CriticalBlock b(externalServiceCacheCrit); + std::pair cachedExternalSevice; + if (externalServiceCache.get(serviceName, cachedExternalSevice)) + return cachedExternalSevice; + } + + StringBuffer output; + try + { + VStringBuffer getServiceCmd("kubectl get svc --selector=server=%s --output=jsonpath={.items[0].status.loadBalancer.ingress[0].hostname},{.items[0].status.loadBalancer.ingress[0].ip},{.items[0].spec.ports[0].port}", serviceName); + k8s::runKubectlCommand("get-external-service", getServiceCmd, nullptr, &output); + } + catch (IException *e) + { + EXCLOG(e); + VStringBuffer exceptionText("Failed to get external service for '%s'. Error: [%d, ", serviceName, e->errorCode()); + e->errorMessage(exceptionText).append("]"); + e->Release(); + throw makeStringException(-1, exceptionText); + } + StringArray fields; + fields.appendList(output, ","); + + // NB: add even if no result, want non-result to be cached too + std::string host, port; + if (fields.ordinality() == 3) // hostname,ip,port. NB: hostname may be missing, but still present as a blank field + { + host = fields.item(0); // hostname + if (0 == host.length()) + host = fields.item(1); // ip + port = fields.item(2); + } + auto servicePair = std::make_pair(host, atoi(port.c_str())); + externalServiceCache.add(serviceName, servicePair); + return servicePair; +} + +std::pair getDafileServiceFromConfig(const char *application) +{ +#ifndef _CONTAINERIZED + UNIMPLEMENTED_X("getDafileServiceFromConfig"); +#endif + /* NB: For now expect 1 dafilesrv in configuration only + * We could have multiple dafilesrv services with e.g. different specs./replicas etc. that + * serviced different planes. At the moment dafilesrv mounts all data planes. + */ + VStringBuffer serviceXPath("services[@type='%s']", application); + Owned dafilesrvServices = getGlobalConfigSP()->getElements(serviceXPath); + if (!dafilesrvServices->first()) + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' not defined or disabled", application); + const IPropertyTree &dafilesrv = dafilesrvServices->query(); + if (!dafilesrv.getPropBool("@public")) + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' has no public service defined", application); + StringBuffer dafilesrvName; + dafilesrv.getProp("@name", dafilesrvName); + auto externalService = getExternalService(dafilesrvName); + if (externalService.first.empty()) + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' - external service '%s' not found", application, dafilesrvName.str()); + if (0 == externalService.second) + throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' - external service '%s' port not defined", application, dafilesrvName.str()); + return externalService; +} + + static unsigned podInfoInitCBId = 0; MODULE_INIT(INIT_PRIORITY_STANDARD) { diff --git a/system/jlib/jcontainerized.hpp b/system/jlib/jcontainerized.hpp index cb8100791c8..de942b9636d 100644 --- a/system/jlib/jcontainerized.hpp +++ b/system/jlib/jcontainerized.hpp @@ -37,5 +37,12 @@ jlib_decl void waitJob(const char *componentName, const char *job, unsigned pend jlib_decl bool applyYaml(const char *componentName, const char *wuid, const char *job, const char *resourceType, const std::list> &extraParams, bool optional, bool autoCleanup); jlib_decl void runJob(const char *componentName, const char *wuid, const char *job, const std::list> &extraParams={}); +extern jlib_decl void runKubectlCommand(const char *title, const char *cmd, const char *input, StringBuffer *output); + +// return the k8s external host and port for serviceName +extern jlib_decl std::pair getExternalService(const char *serviceName); + +extern jlib_decl std::pair getDafileServiceFromConfig(const char *application); + } diff --git a/system/jlib/jmisc.cpp b/system/jlib/jmisc.cpp index 6fa8e1f8e35..f6560ec9967 100644 --- a/system/jlib/jmisc.cpp +++ b/system/jlib/jmisc.cpp @@ -1004,100 +1004,6 @@ jlib_decl char **getSystemEnv() } -void runKubectlCommand(const char *title, const char *cmd, const char *input, StringBuffer *output) -{ -#ifndef _CONTAINERIZED - UNIMPLEMENTED_X("runKubectlCommand"); -#endif -// NB: will fire an exception if command fails (returns non-zero exit code) - - StringBuffer _output, error; - if (!output) - output = &_output; - unsigned ret = runExternalCommand(title, *output, error, cmd, input, ".", nullptr); - if (output->length()) - MLOG(MCdebugInfo, unknownJob, "%s: ret=%u, stdout=%s", cmd, ret, output->trimRight().str()); - if (error.length()) - MLOG(MCdebugError, unknownJob, "%s: ret=%u, stderr=%s", cmd, ret, error.trimRight().str()); - if (ret) - { - if (input) - MLOG(MCdebugError, unknownJob, "Using input %s", input); - throw makeStringExceptionV(0, "Failed to run %s: error %u: %s", cmd, ret, error.str()); - } -} - -static CTimeLimitedCache> externalServiceCache; -static CriticalSection externalServiceCacheCrit; -std::pair getExternalService(const char *serviceName) -{ -#ifndef _CONTAINERIZED - UNIMPLEMENTED_X("getExternalService"); -#endif - { - CriticalBlock b(externalServiceCacheCrit); - std::pair cachedExternalSevice; - if (externalServiceCache.get(serviceName, cachedExternalSevice)) - return cachedExternalSevice; - } - - StringBuffer output; - try - { - VStringBuffer getServiceCmd("kubectl get svc --selector=server=%s --output=jsonpath={.items[0].status.loadBalancer.ingress[0].hostname},{.items[0].status.loadBalancer.ingress[0].ip},{.items[0].spec.ports[0].port}", serviceName); - runKubectlCommand("get-external-service", getServiceCmd, nullptr, &output); - } - catch (IException *e) - { - EXCLOG(e); - VStringBuffer exceptionText("Failed to get external service for '%s'. Error: [%d, ", serviceName, e->errorCode()); - e->errorMessage(exceptionText).append("]"); - e->Release(); - throw makeStringException(-1, exceptionText); - } - StringArray fields; - fields.appendList(output, ","); - - // NB: add even if no result, want non-result to be cached too - std::string host, port; - if (fields.ordinality() == 3) // hostname,ip,port. NB: hostname may be missing, but still present as a blank field - { - host = fields.item(0); // hostname - if (0 == host.length()) - host = fields.item(1); // ip - port = fields.item(2); - } - auto servicePair = std::make_pair(host, atoi(port.c_str())); - externalServiceCache.add(serviceName, servicePair); - return servicePair; -} - -std::pair getDafileServiceFromConfig(const char *application) -{ -#ifndef _CONTAINERIZED - UNIMPLEMENTED_X("getDafileServiceFromConfig"); -#endif - /* NB: For now expect 1 dafilesrv in configuration only - * We could have multiple dafilesrv services with e.g. different specs./replicas etc. that - * serviced different planes. At the moment dafilesrv mounts all data planes. - */ - VStringBuffer serviceXPath("services[@type='%s']", application); - Owned dafilesrvServices = getGlobalConfigSP()->getElements(serviceXPath); - if (!dafilesrvServices->first()) - throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' not defined or disabled", application); - const IPropertyTree &dafilesrv = dafilesrvServices->query(); - if (!dafilesrv.getPropBool("@public")) - throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' has no public service defined", application); - StringBuffer dafilesrvName; - dafilesrv.getProp("@name", dafilesrvName); - auto externalService = getExternalService(dafilesrvName); - if (externalService.first.empty()) - throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' - external service '%s' not found", application, dafilesrvName.str()); - if (0 == externalService.second) - throw makeStringExceptionV(JLIBERR_K8sServiceError, "dafilesrv service '%s' - external service '%s' port not defined", application, dafilesrvName.str()); - return externalService; -} - // checks if 'name' is an internal environment variable (prefixed with 'HPCC_') // if !matches : returns null // if matches : returns allocated copy of configured value or defaultValue if not set. diff --git a/system/jlib/jmisc.hpp b/system/jlib/jmisc.hpp index 1943404871a..bc3cdd07205 100644 --- a/system/jlib/jmisc.hpp +++ b/system/jlib/jmisc.hpp @@ -332,14 +332,6 @@ extern jlib_decl char *mkdtemp(char *_template); extern jlib_decl char **getSystemEnv(); - -extern jlib_decl void runKubectlCommand(const char *title, const char *cmd, const char *input, StringBuffer *output); - -// return the k8s external host and port for serviceName -extern jlib_decl std::pair getExternalService(const char *serviceName); - -extern jlib_decl std::pair getDafileServiceFromConfig(const char *application); - extern jlib_decl char *getHPCCEnvVal(const char *name, const char *defaultValue); #endif