Todos os produtos
Search
Central de documentação

DataWorks:Analisar geolocalização de IP com uma UDF do MaxCompute

Última atualização: Aug 25, 2026

O MaxCompute não chama APIs externas diretamente. Neste tutorial, você combina um banco de dados de endereços IP offline com uma função definida pelo usuário (UDF) para analisar a geolocalização de endereços IP inteiramente dentro do MaxCompute.

Descrição do caso

O MaxCompute é um ambiente de computação fechado e não chama APIs HTTP externas, como APIs de consulta de geolocalização de IP de terceiros, para pesquisar a geolocalização de um endereço IP em tempo real. A tabela a seguir compara três abordagens para analisar a geolocalização de IP no MaxCompute.

Abordagem

Implementação

Vantagens

Desvantagens

Veredito

Abordagem 1: Exportar dados e consultar

Exporte os endereços IP que deseja analisar do MaxCompute para seu dispositivo local e use um script para chamar uma API em loop.

Conceito simples.

Ineficiente e sujeita a limites de taxa de API. Não adequada para dados em grande escala.

Não recomendada

Abordagem 2: Consultar um banco de dados local

Baixe o banco de dados de endereços IP e os endereços IP que deseja analisar para seu dispositivo local e execute a correspondência em um programa local.

Sem limites de taxa de API.

Os dados saem do data warehouse, impedindo a junção com outros dados de negócios no MaxCompute, como uma tabela de pedidos.

Não recomendada

Abordagem 3: Carregar o banco de dados de IP no warehouse e consultá-lo

Faça upload de todo o banco de dados de endereços IP para uma tabela do MaxCompute e use uma UDF em SQL para comparar os dados.

Alto desempenho: utiliza totalmente os recursos de computação paralela do MaxCompute; Bem integrada: permite junção direta com qualquer tabela do MaxCompute; Escalável: adequada para qualquer volume de dados.

É necessário atualizar o banco de dados de endereços IP regularmente.

Melhor abordagem

A Abordagem 3 é a única que oferece o desempenho e a integração necessários para análise de big data. Este tutorial implementa a Abordagem 3.

Design da solução

Esta solução utiliza um banco de dados de endereços IP offline e uma função definida pelo usuário (UDF). Ela consiste em três módulos:

  1. Preparação de dados: baixe um arquivo de banco de dados de endereços IP público e faça upload dele para uma tabela do MaxCompute, que servirá como referência de endereços.

  2. Desenvolvimento da UDF: crie uma UDF que converta uma string de endereço IP em um número inteiro. A conversão para inteiro é fundamental para uma correspondência de intervalo eficiente.

  3. Análise SQL: escreva um SQL que chame a UDF para comparar um endereço IP com a tabela do banco de dados de endereços IP e obter a geolocalização final do endereço IP.

    A figura a seguir mostra como os três módulos trabalham juntos.

image

Pré-requisitos

Importante

Este tutorial aplica-se a um workspace do DataWorks que não tem a opção Use Data Studio (New Version) ativada. O exemplo utiliza um workspace no modo básico.

Procedimento

Baixar o banco de dados de endereços IP

Baixe o banco de dados de endereços IP de exemplo, ipdata.csv, para o seu dispositivo local. Para analisar seus próprios endereços IP, baixe um banco de dados de endereços IP por conta própria.

Os dados de exemplo têm a seguinte estrutura:

  • O formato dos dados é UTF-8.

  • Os quatro primeiros valores representam o endereço inicial e o endereço final de um intervalo de endereços IP. Os dois primeiros são inteiros decimais e os dois últimos estão em notação decimal pontuada. O intervalo de endereços IP é fornecido em formato inteiro para permitir o cálculo de pertencimento de um IP ao segmento de rede.

Importante

Se você utilizar seu próprio banco de dados de endereços IP, certifique-se de que o arquivo esteja codificado em UTF-8 e que forneça o endereço inicial e o endereço final de cada intervalo em formato inteiro. Caso as colunas ou a ordem das colunas sejam diferentes dos dados de exemplo, ajuste o esquema da tabela e o mapeamento de campos na próxima seção adequadamente.

Fazer upload do banco de dados de endereços IP para uma tabela

  1. Crie uma tabela do MaxCompute.

    1. Faça login no DataWorks console. Na região de destino, clique em Data Development and O&M > Data Development no painel de navegação à esquerda. Selecione um workspace na lista suspensa e clique em Go to Data Development.

    2. Na página Data Development, clique com o botão direito do mouse no fluxo de negócios de destino e escolha Create Node > MaxCompute > ODPS SQL.

    3. Na caixa de diálogo Create Node, defina Engine Instance como o recurso de computação vinculado na seção de pré-requisitos, insira um Name para o nó e clique em OK.

    4. No editor de nós ODPS SQL, insira as seguintes instruções:

      -- If a table named ipresource already exists, drop it first.
      DROP TABLE IF EXISTS ipresource;
      
      -- Create a table to store the IP address database information.
      CREATE TABLE IF NOT EXISTS ipresource 
      (
          start_ip     BIGINT,   -- Start address of the IP range (decimal integer)
          end_ip       BIGINT,   -- End address of the IP range (decimal integer)
          start_ip_arg STRING,   -- Start address of the IP range (dotted-decimal string, such as "203.0.113.0")
          end_ip_arg   STRING,   -- End address of the IP range (dotted-decimal string, such as "203.0.113.255")
          country      STRING,   -- Country name
          area         STRING,   -- Area name (usually empty or the same as the country)
          city         STRING,   -- City name (may be a larger administrative division in some records)
          county       STRING,   -- District or county name
          isp          STRING    -- Internet service provider
      );
    5. Clique no ícone Run icon para executar o código. Na caixa de diálogo Parameter, selecione o grupo de recursos serverless vinculado e clique em Running. Após a conclusão da etapa Estimate MaxCompute Computing Cost, clique em Running para executar a tarefa do nó.

  2. Faça upload dos dados para a tabela.

    1. Clique no ícone Console navigation icon no canto superior esquerdo. Na página exibida, escolha All Products > Data Integration > Upload and Download.

    2. No painel de navegação à esquerda, clique no ícone Upload Data icon para acessar a página Upload Data.

    3. Clique em Upload Data para ir à página de configuração de upload de dados. Use a configuração a seguir como referência.

      Parameter

      Descrição

      Specify Data to Be Uploaded > Select file

      Faça upload do arquivo ipdata.csv baixado para o seu dispositivo local.

      Configure Destination Table > Compute Engine

      Selecione MaxCompute.

      Configure Destination Table > MaxCompute Project Name

      Selecione o projeto MaxCompute da seção Pré-requisitos.

      Configure Destination Table > Select Destination Table

      Selecione a tabela ipresource como tabela de destino. Se a tabela recém-criada não estiver disponível para seleção, acesse Data Map > My Data > Refresh Table metadata e atualize manualmente os metadados de odps.<project_name>.ipresource.

      Configure Destination Table > Resource Group

      Selecione o grupo de recursos serverless da seção Pré-requisitos.

      Configure Destination Table > Preview Data of Uploaded File

      Clique em Mapping by Order para mapear os dados do arquivo aos campos da tabela ipresource.

    4. Clique em Upload Data e aguarde a conclusão do upload dos dados.

  3. Verifique se os dados foram carregados.

    Retorne ao editor de nós ODPS SQL na página Data Development. Escreva os seguintes comandos SQL, selecione-os e execute-os.

    --Query the number of rows in the table.
    SELECT COUNT(*) FROM ipresource;
    
    --Preview the first 10 rows of data.
    SELECT * FROM ipresource limit 10;

    As colunas start_ip e end_ip contêm inteiros decimais, enquanto start_ip_arg e end_ip_arg contêm endereços em notação decimal pontuada. Se os valores estiverem desalinhados ou a tabela estiver vazia, faça upload do arquivo novamente e remapeie as colunas para os campos da tabela.

Desenvolver a UDF

Para comparar endereços IP em SQL, é necessária uma UDF que converta uma string de endereço IP em notação decimal pontuada, como 203.0.113.10, em um inteiro decimal comparável por magnitude.

  1. Crie um recurso Python do MaxCompute.

    1. Na página Data Development, clique com o botão direito do mouse no fluxo de negócios de destino e escolha Create Resource > MaxCompute > Python.

    2. Na caixa de diálogo Create Resource, insira um Name para o recurso (por exemplo, mc.py), selecione Upload as ODPS Resource e clique em Create.

    3. No recurso Python, insira o seguinte código:

      from functools import reduce
      from odps.udf import annotate
      
      @annotate("string->bigint")
      class IPtoInt(object):
          def evaluate(self, ip):
              try:
                  return reduce(lambda x, y: (x << 8) + y, map(int, ip.split('.')))
              except:
                  return 0

      Clique no ícone Submit icon para enviar o recurso.

  2. Crie uma UDF do MaxCompute.

    1. Na página Data Development, clique com o botão direito do mouse no fluxo de negócios de destino e escolha Create Function > MaxCompute > Function.

    2. Na caixa de diálogo Create Function, insira um Name para a função (por exemplo, ip2int). Se houver vários mecanismos MaxCompute vinculados no Data Development, selecione a Engine Instance do MaxCompute onde deseja criar esta função. Em seguida, clique em Create. Este é o nome usado para chamar a função e não pode ser modificado após a definição.

    3. Na página do editor de funções, configure os parâmetros. A tabela a seguir descreve os principais parâmetros. Para mais informações sobre os parâmetros, consulte Register a MaxCompute function.

      Parâmetro

      Descrição

      Function Type

      Mantenha o valor padrão Other Functions.

      Function Name

      Nome da UDF, usado para referenciar a função em SQL. O nome deve ser globalmente único.

      Class Name

      Nome da classe principal que implementa a UDF. Este parâmetro é obrigatório. Valor de exemplo: mc.IPtoInt.

      Nota

      Para um recurso Python, una o nome do recurso Python e o nome da classe com um ponto, omitindo a extensão .py do nome do recurso.

      Resources

      Selecione o arquivo de recurso mc.py da etapa anterior.

  3. Clique no ícone Save icon na barra de ferramentas para salvar a função.

  4. Clique no ícone Submit icon na barra de ferramentas. Na caixa de diálogo para envio de uma nova versão, insira uma Change Description e clique em OK.

Analisar geolocalização de IP usando SQL

A UDF converte o endereço IP consultado em um inteiro, e a instrução SQL retorna o intervalo de endereços IP na tabela ipresource que contém esse inteiro.

  1. Retorne ao editor de nós ODPS SQL. Escreva o seguinte comando SQL, selecione-o e execute-o.

    -- Replace 203.0.113.10 with the IP address that you want to query.
    -- The address must be in dotted-decimal notation. The UDF returns 0 for a value that it cannot parse, and the query then returns no rows.
    SELECT * FROM ipresource
    WHERE ip2int('203.0.113.10') >= start_ip
    AND ip2int('203.0.113.10') <= end_ip;
  2. Clique no ícone Run icon. Na caixa de diálogo Parameter, selecione o grupo de recursos serverless vinculado, clique em Running e clique em Running novamente após a conclusão da etapa Estimate MaxCompute Computing Cost.

  3. Visualize o resultado para obter a geolocalização do endereço IP consultado.

Referências